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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 永飞 中级黑马   /  2015-8-11 10:46  /  591 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这个程序是怎么运行的?流程是什么?

/*
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
*/
class Demo
{
       
        public static void main(String[] args){
                int n = 30;
                decompose(n);
        }
        private static void decompose(int n){
                System.out.print(n+"=");
                for(int i=2;i<n+1;i++){    //   2<=i<=n
                        while(n%i==0 && n!=i){
                                n/=i;
                                System.out.print(i+"*");
                        }
                        if(n==i){
                                System.out.println(i);
                                break;
                        }
                }
       
        }
}

10 个回复

倒序浏览
int num=90;
                int temp=2;
                System.out.print("num="+num+"=");
                for(;temp<=num;temp++){
                       
                        if(num%temp==0)
                        {
                                System.out.print(temp+"*");
                                num=num/temp;
                        }
                       
                        //temp++;
                       
                }
               
                        System.out.print(num);
回复 使用道具 举报
18027587106 发表于 2015-8-11 11:40
int num=90;
                int temp=2;
                System.out.print("num="+num+"=");

这个是什么意思呀
回复 使用道具 举报
永飞 发表于 2015-8-11 12:03
这个是什么意思呀

那就是一个输出哦,输出你的分解的那个数{:2_35:}
回复 使用道具 举报
首先执行decompose()方法。
输出 30=
1、执行for循环,发现i=2;n=30,i<n
2、执行while循环,n能整出i,并且n不等于i
3、执行while循环体,n/=i;也就是30/2,之后输出i;
4、此时程序打印30=2*
5、执行完循环体之后就会在判断while的表达式是否成立。发现条件成立。执行 n是否等于i。发现不等于再次换到while的循环体。
之后就是重复上面的动作了。


如果您觉得我的回答还满意的话,请回复一下我
我的QQ:2355928351
如果您还有其他的入学前问题可以加我的QQ

回复 使用道具 举报
耀阳圣尊 发表于 2015-8-11 14:12
首先执行decompose()方法。
输出 30=
1、执行for循环,发现i=2;n=30,i

赞了,好详细,谢谢啦
回复 使用道具 举报
    public static void decompose(int n){         int num = n;         int demp = 2;         for(;demp<= num;demp ++) {             if(num%demp == 0) {                 System.out.print(demp);                 if(num != demp) {                     System.out.print("*");                 }                 num = num/demp;                 demp = 2;             }         }     }     public static void main(String[] args) {         int n = 90;         System.out.print(n + "=");         decompose(n);     }
回复 使用道具 举报
小柒 中级黑马 2015-8-11 17:49:30
8#
程序是从main方法开始执行的,将30赋给n,然后执行decompose()方法,进入循环:这个循环结构就是分解质因数的过程,一个数除以1没有意义,所以循环从2开始。
当i=2时,判断i是否<n+1,实际上就是判断是否i<=n,然后进入while循环,其实这里的判断条件可以是 while(n%i==0 && n==i),下面的if语句就可以不用写了,但是这样,你输出的分解质因数的结果,就会出现这样90=2*3*3*5* 的情况,所以有了你现在写的这个操作让n!=i,如果n==i了说明就是最后一个质因数了,就不用加*号了,直接打印出i就可以了。
while循环的思路是,判断一个数的质因数都有哪些,执行步骤是,一个数先除以2,(为什么不从1开始,前面说过了)如果余数为零了,那么再用这个数除以2的结果在去除以2,如果满足条件就继续除以2,知道不满足,就退出当前的while循环,i累加就开始除以3,依次除到最后一个数等于你for循环循环的次数,就说明分解完成了,那一个数做例子。

80 程序开始的时候80/2 余数为零,这时候还应该在继续除以2,(因为有可能这个数的质因数有多个2组成,所以不能看到当80/2余数为零的时候就直接除以3)而且是用你80/2之后的结果去除以2,所以是40/2,余数依然为零,继续除以2,20/2,余数依然为零,继续除以2,10/2,余数依然为零,5/2,余数不为零,while循环条件不满足,终止while循环,继续从for循环开始,所以是5/3,余数不为零,接着5/4,余数也不为零,继续5/5,这时候余数为零了,而且通过观察已经除到最后了,所以当你除到最后的结果等于for循环的次数的时候,就终止循环,也就有了, if(n==i){System.out.println(i);break;}这条语句。希望你能理解明白。
回复 使用道具 举报
666666666666666
回复 使用道具 举报
耀阳圣尊 发表于 2015-8-11 14:12
首先执行decompose()方法。
输出 30=
1、执行for循环,发现i=2;n=30,i

我已经在黑马学习啦
回复 使用道具 举报
看了一下,不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马