黑马程序员技术交流社区

标题: Java求1到20的最小公倍数 [打印本页]

作者: hmwudizl91zl    时间: 2013-10-5 17:58
标题: Java求1到20的最小公倍数
本帖最后由 hmwudizl91zl 于 2013-10-5 23:21 编辑
  1. package baiduzhidao.com;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. public class baiduzhidao_1 {
  5. //有三种方法可解:1,穷举法(逻辑最简单)。2,分解质因数。3,短除法(最合理)。
  6. //本方法为短除法,就是先把1-20的数一直除以质数2,直到所有的数都不能整除2为止,再除以3……,依此类推,最后把除数相乘就行;
  7. private static ArrayList tagetIntegers=new ArrayList();//存放除数,它们的积就是所求的值;
  8. private static int[] primes=new int[]{2,3,5,7,11,13,17,19}; //存放的是1-20的质数,可以封装一个方法,1-?都可以,只要不溢出;
  9. private static int[] datas=new int[]{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};//存放数据源
  10. private static int flag_1=0;//标记,当值为0的时候表示当前质数数据源中的任何一个数都不能整除,反之为1。
  11. private static int j=0;//primes的下标。当他为7的时候,并且没有数可以短除它的时候 结束(也可以判断datas的所有元素都为1的时候结束,麻烦些);
  12. public static void main(String[] args) {
  13. int flag_time=0;//标记时间复杂度;
  14. while(true){
  15. flag_1=0;
  16. doit();
  17. if(j>=primes.length-1 && flag_1==0){
  18. break;
  19. }if(flag_1==0){
  20. j++;
  21. }
  22. dataPrint();
  23. flag_time++;
  24. }
  25. resultPrint();

  26. System.out.println(“时间复杂度为:”+flag_time*20);
  27. }

  28. //完成一次短除;
  29. public static void doit() {
  30. for(int i=0;i if(datas%primes[j]==0){
  31. datas=datas/primes[j];
  32. flag_1=1;
  33. }
  34. }
  35. if(flag_1==1){
  36. tagetIntegers.add(primes[j]);
  37. }
  38. }

  39. //打印现在的所有数据;
  40. public static void dataPrint(){
  41. System.out.println(“datas数据源:”+Arrays.toString(datas));
  42. System.out.println(“除数:”+tagetIntegers.toString());
  43. System.out.println(“标记:”+flag_1);
  44. System.out.println(“j的值:”+j);
  45. System.out.println();
  46. }

  47. public static void resultPrint(){
  48. int result=1;
  49. for (Integer i : tagetIntegers) {
  50. result*=i;
  51. }
  52. System.out.println(“最后的结果为:”+result);
  53. }
  54. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2