黑马程序员技术交流社区

标题: 技术贴 [打印本页]

作者: 雪穗    时间: 2018-7-17 19:01
标题: 技术贴
最近我做了一个题目,题目的内容是将一个正整数分解质因数。例如:输入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;
                        }
                }
        }
}
这时我总结了,代码要多想多思考,要根据题目的不同,使用不同的东西进行用,不可以思维固化,要有编程思想。

作者: 小浙姐姐    时间: 2018-7-23 16:05





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