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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄方 中级黑马   /  2012-3-4 11:12  /  1696 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

2 个回复

正序浏览
用JAVA写的代码
public class number{
        public void text4(){
         Scanner input=new Scanner(System.in);
          int number=input.nextInt();//从键盘输入一个要分解的数
          int k=2;
          while(number>k){ /用while循环来实现
                  if(number%k==0){
                          System.out.print(k+"*");
                          number=number/k;
                  }else k++;
          }
          System.out.println(number+";");
        }
public static void main(System in){
      number nb=new number();
       nb.text();
   }
}
回复 使用道具 举报
纳闷了。。。帖子都摆在这7个多小时了,咋没人来给个回复呢
我也研究思考了好久了,还好整出来了。。。汗,技术分不好拿啊,也已经实现楼主的例如:“输入90,打印出90=2*3*3*5”,请看,看完保证你弄明白各个问题

//思想:所谓分解质因数就是将正整数用质数以乘法形式连接起来
//输入的值为质数的时候直接返回并提示当前输入的值为质数,
//最小的质数是2,为了方便也为了规范,我们就从2开始运算。
public class Test1{
        public static void main(String args[]){//主函数
                zhijie(90);//输入90
        }
        public static void zhijie(int n){//质解函数
                int[] arr=new int[100];//定义数组用来存储因子,此处长度够用即可
                int pos=0;//定义指针变量用来遍历数组
                        for(int i=2;i<=n;i++){//定义for循环,以最小的质数2
                                //初始化i的值,从2作为除数开始运算
                               
                        while(n!=i){//即n不是质数的时候执行while,把当前质因数分解彻底后
                                if(n%i==0){//当n仍是i的倍数的时候,继续进行分解直至分解尽n中的当前因子
                                arr[pos++]=i;//分解一次输出一个因子,说明有1个或多个当前i的值作为n的质因子
                                n=n/i;//分解一次后,n的值缩小i倍,进行下一次分解
                        }else{//当n的值已经不再包含当前i值的因子,则跳出while改变i值,遍历n 其他因子
                                break;
                        }
                                }                       
                        }
                        arr[pos]=n;//当n分解尽质因数后,当前n值已不再包含任何质因数
                //(当前n值是被分解到最后的一个质因数),打印n!此处已经不需要pos自增1,上面在最后一次
                        //赋值给arr元素之后已经自增1;
                System.out.print("90=");//打印:此处不需要再循环内执行
                        for(int i=0;i<pos;i++){//for循环遍历数组,格式化输出
                        System.out.print(arr[i]+"*");
                }
                        System.out.println(n);
        }
}

评分

参与人数 1技术分 +1 收起 理由
强文何 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马