黑马程序员技术交流社区

标题: 一个javase 基础的问题! [打印本页]

作者: 黄方    时间: 2012-3-4 11:12
标题: 一个javase 基础的问题!
                           题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 期待讨论!!!
作者: wang耀雨    时间: 2012-3-4 18:38
纳闷了。。。帖子都摆在这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);
        }
}
作者: 刘泰    时间: 2012-3-4 18:49
用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();
   }
}




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