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