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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

雪穗

初级黑马

  • 黑马币:26

  • 帖子:8

  • 精华:0

© 雪穗 初级黑马   /  2018-7-17 19:01  /  901 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近我做了一个题目,题目的内容是将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。一开始我便有了思路,第一点:如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。第二点:如果n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。第三点:如果n不能被k整除,则用k+1作为k的值,重复执行第一步。这是需要我们输入数字,因为每一次数字的不同会产生不同的结果,所以我选择在调用方法中写出程序,然后再main方法中调用它。
    首先线创建main方法,然后我开始着手写调用方法。作为结果的字符串的例子输出是90=2*3*3*5。除了最后一个数字没有"*",其他的后面都跟着一个"*"。所以要将最后一个数字和其他的数字区分开。首先打出System.out.print(n+"="),这样就是可以先输出"需要被除的数字="。然后开始进行除法,首先进行循环,因为1能被任何数整除,没有意义,所以让循环从2开始,到这个被测数字的本身结束。如果它能被整除且不等于它自己,说明他还可以继续除,这时需要给被测数字重新赋值,即n/i,且输出的数字i后面要加"*",一旦i==n,则说明这是这个过程已经结束了,且最后只输出这个i即可。但是我一开始在for循环里嵌套一个if进行判断,它可以正确的进行第一步的整除数字,但是后续的数字可以被第一步的数字整除,但是因为if的原因,那个第一步的数字已经被执行了既不能再次显示。当时我很困扰。后来我才想到老师说过不知道循环次数的时候推荐用while,这时我想到了while,一旦i==n时,就中断。这时就可以完美的解决这个问题。代码如下:
public class Prog4{
        public static void main(String[] args){
                int n = 13;
                decompose(n);
        }
        private static void decompose(int n){
                System.out.print(n+"=");
                for(int i=2;i<n+1;i++){
                        while(n%i==0 && n!=i){
                                n/=i;
                                System.out.print(i+"*");
                        }
                        if(n==i){
                                System.out.println(i);
                                break;
                        }
                }
        }
}
这时我总结了,代码要多想多思考,要根据题目的不同,使用不同的东西进行用,不可以思维固化,要有编程思想。

1 个回复

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