import java.util.*; class FenJie {
/**
* 题目:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。
*
*/
// changeYinShu()方法想达到的效果是调用一次该方法就判断一次调用的参数是不是质数 如果是质数,
// 就返回该数 如果不是,就自行返回该数后面一个相邻质数 比如参数为4,就自行返回5
public static int changeYinShu(int number) { int i = 2;
for (i = 2; i < number; i++) {
if (number % i == 0) {
// 如果传入的参数不是一个质数,那就自动寻找比这个参数大的而且最靠近它的质数
// 其实这个方法,是为了满足下面fenJie()方法里质因数k的需要,找出比k大的一个质数。
number++;
// 这里将i重新赋值为1,因为continue执行后i会自增,想达到的目的是再次让for循环
// 里面的变量i在下次循环是初始为2;
i = 1;
continue;
}
} return number;
} // k为因数,初始值为2. 这是最小的质因数
int k = 2; public int fenJie(int n) {
// 递归的出口
if (n == k) {
System.out.print(k);
return k;
} else {
// 当k是n的一个质因数时,就打印出k,并且将n赋值为 n / k;
if (n % k == 0) {
System.out.print(k + "*");
n = n / k;
return fenJie(n);
} else {
// 若n不能被k整除时,就换下一个质因数,这时调用改变因数changeYinShu()的方法,
// 传入的参数为 k + 1,换下一个因数去试
k = FenJie.changeYinShu(k + 1); return fenJie(n);
}
}
}
} public class Test4 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个正整数:");
int num = input.nextInt(); FenJie fenJieNumber = new FenJie();
// 定义好方法后,要想分解一个数,只需要调用fenJie()方法了
fenJieNumber.fenJie(num); }
}
这是修改后的,可是测试的时候发现一个蛋疼的数字,90001 这个数蛋疼~~~ 不知道哪里还有问题,求教啊