A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wocan23 中级黑马   /  2014-12-9 15:06  /  1673 人查看  /  18 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

题目:将一个正整数的分解质因数。例如:输入90,打印出90=2*3*3*5。

18 个回复

倒序浏览
最好是写详细的注释
回复 使用道具 举报

  1. package java01;

  2. class Test1 {
  3.         

  4.         public static void main(String[] args) {
  5.               int num = 90;
  6.               System.out.print(num+"=");
  7.               for(int i=2 ;i<=num ;i++)//分解.从1到num检查,看看是不是因子
  8.               {
  9.                       while(num%i==0)
  10.                       {
  11.                               num=num/i;
  12.                               if(num==1)
  13.                                       System.out.print(i);//最大的因子后不用加*
  14.                               else
  15.                                       System.out.print(i+"*");
  16.                       }
  17.               }
  18.         }

  19. }
复制代码
回复 使用道具 举报 2 0
  1. //定义一个获取质因数静态方法,需要传入一个Int类型的值,和一个Integer类型集合
  2.         public static void ZhiYinShu(int num,ArrayList<Integer> nums)
  3.         {
  4.                 //分析可得,最小质因数除1之外,只有2,3,5
  5.                 //所以分别判断传入的数%2,%3,%5是否等于0
  6.                 //如果等于零,则表示该数包含该质因数
  7.                 if(num % 2 == 0)
  8.                 {
  9.                         nums.add(2);
  10.                         //然后让num 除以2
  11.                         num = num / 2;
  12.                 }
  13.                 if(num % 3 ==0)
  14.                 {
  15.                         nums.add(3);
  16.                         num = num / 3;
  17.                 }
  18.                 if(num % 5 ==0)
  19.                 {
  20.                         nums.add(5);
  21.                         num = num/5;
  22.                 }
  23.                 //这个判断是为了控制递归,如果该数做了以上操作后 还满足以下情况则继续调用本函数
  24.                 if(num % 3==0 ||num % 5 == 0|| num%2 == 0)
  25.                 {
  26.                         ZhiYinShu(num,nums);
  27.                 }       
  28.                 //否则就直接跳出,结束函数
  29.                 else
  30.                 {
  31.                         return;
  32.                 }
  33.         }
复制代码
我是用递归做的
回复 使用道具 举报
  1.                 //分析可得,最小质因数除1之外,只有2,3,5,7
  2.                 //所以分别判断传入的数%2,%3,%5是否等于0
  3.                 //如果等于零,则表示该数包含该质因数
  4.                 if(num % 2 == 0)
  5.                 {
  6.                         nums.add(2);
  7.                         //然后让num 除以2
  8.                         num = num / 2;
  9.                 }
  10.                 if(num % 3 ==0)
  11.                 {
  12.                         nums.add(3);
  13.                         num = num / 3;
  14.                 }
  15.                 if(num % 5 ==0)
  16.                 {
  17.                         nums.add(5);
  18.                         num = num/5;
  19.                 }
  20.                 if(num % 7 == 0)
  21.                 {
  22.                         nums.add(7);
  23.                         num = num/7;
  24.                 }
  25.                 //这个判断是为了控制递归,如果该数做了以上操作后 还满足以下情况则继续调用本函数
  26.                 if(num % 3==0 ||num % 5 == 0|| num%2 == 0 || num %7 == 0)
  27.                 {
  28.                         ZhiYinShu(num,nums);
  29.                 }       
  30.                 //否则就直接跳出,结束函数
  31.                 else
  32.                 {
  33.                         return;
  34.                 }
  35.         }
复制代码
我晕  代码 不对 还有个7 忘了~~
回复 使用道具 举报
刘峻池 发表于 2014-12-9 19:42
我晕  代码 不对 还有个7 忘了~~

然后把获取质因数的集合 把里面的元素按指定方式打印就行了  这个就不用写了吧 ~
回复 使用道具 举报
我也做一做
回复 使用道具 举报
刘峻池 发表于 2014-12-9 19:48
然后把获取质因数的集合 把里面的元素按指定方式打印就行了  这个就不用写了吧 ~ ...

不用看了   我理解错了  我是逗比~~  
回复 使用道具 举报
  1. //接受一个数字和Integer类型的集合
  2.         public static void ZhiYinShu(int num,ArrayList<Integer> nums)
  3.         {
  4.                 //定义一个局部变量接受传来的参参数num
  5.                 int num1 = num;
  6.                 //循环,从2 到num1
  7.                 for(int x = 2; x <= num1 ; x ++)
  8.                 {
  9.                         //如果该数不是一个质因数则循环继续,不运行后面的语句
  10.                         if(isTrue(x))
  11.                         {
  12.                                 continue;
  13.                         }
  14.                         //当x为一个质因数时,则进入while中,
  15.                         while(true)
  16.                         {
  17.                                 //判断num是否可以整除这个质因数
  18.                                 if(num % x ==0)
  19.                                 {
  20.                                         //将num除以x再赋值给num
  21.                                         num = num/x;
  22.                                         //可以打印一下这个质因数
  23.                                         System.out.println(x);
  24.                                         //把这个质因数添加到集合中
  25.                                         nums.add(x);
  26.                                 }
  27.                                 //一直到num无法整除这个质因数时,内部循环跳出
  28.                                 else
  29.                                 {
  30.                                         break;
  31.                                 }
  32.                         }
  33.                 }
  34.         }
  35.        
  36.         //接受一个数,判断其是否为质因数 true-->不是 ,false--> 是
  37.         public static boolean isTrue(int num)
  38.         {
  39.                 for(int x = 2;x < num; x++)
  40.                 {
  41.                         if(num % x == 0)
  42.                         {
  43.                                 return true;
  44.                         }
  45.                 }
  46.                 return false;
  47.         }
复制代码
这次应该对了~  上代码
回复 使用道具 举报
这个有点没搞懂
回复 使用道具 举报
算法会,但要把代码敲出来还有点问题,等我解决了再上传给楼主:lol
回复 使用道具 举报
wocan23 来自手机 中级黑马 2014-12-10 14:43:05
12#
谢谢!回头我试试
回复 使用道具 举报
我感觉可以先找出质数来~
回复 使用道具 举报

代码精简,不错的方法
回复 使用道具 举报
刘峻池 发表于 2014-12-9 21:48
这次应该对了~  上代码

这次对了,你这个方法应该可以优化成递归吧
回复 使用道具 举报
学习学习……
回复 使用道具 举报
chensc 金牌黑马 2014-12-16 14:25:44
17#
学习学习!
回复 使用道具 举报
冥夜 中级黑马 2014-12-16 22:53:32
18#
我觉得2L写的很好啊
回复 使用道具 举报
以前老师说每个人写的代码都不一样,现在是感觉到了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马