public class test{
public static void main(String []args){
10
int n,m=0
Scanner sc = new Scanner(System.in)
System.out.print("input your number:")
n = sc.nextInt()
m = n
boolean f=true
for (int i=2i<=n/2i++) { //判断是否是素数
if (n%i == 0) {
f = false
break
}
}
if (f) {
System.out.println(n + "=1*" + n)
} else {
boolean s = false
int i = 0
while (n >0)
{
for (i=2i<=n/2i++) {
if (n%i == 0) { //如果i是n的因数
f = true
for (int j=2j<=i/2j++) { //判断i是不是素数
if (i%j == 0) {
f = false
break
}
}
if (f) {
if (s) { //如果不是第一次打印
System.out.print("*" + i)
} else { //如果是第一次打印
System.out.print(i)
s = true
}
n /= i
break
}
}
}
if (i >n/2) {
break
}
}
System.out.println("*" + n + "=" + m)
}
}
}
将一个正整数分解质因数。例如:输入60;打印出2*3*5*2
算法实现构思:
1、用Scanner实现输入一个正整数n
2、用一个for循环遍历一个从 k=2开始查找到k<=n的数
3、如果 n%k==0的时候,输出k的值
4、然后把n的值递归一下,即 n=n/k
5、这个时候要把for循环重新执行,即再定义k=2
下面是实现代码:
下面是运行结果
上面是后来整理的构思以及代码实现,一开始拿到这个题目,就立马去做了,可是马上掉进了各种各样的坑,我觉得以后做算法题先把做题思路想好,从部分到整体,不然一道简单的算法题就要耗掉很多时间。
参考资料
CSDN.CSDN[引用时间2018-1-5]