纳闷了。。。帖子都摆在这7个多小时了,咋没人来给个回复呢
我也研究思考了好久了,还好整出来了。。。汗,技术分不好拿啊,也已经实现楼主的例如:“输入90,打印出90=2*3*3*5”,请看,看完保证你弄明白各个问题
//思想:所谓分解质因数就是将正整数用质数以乘法形式连接起来
//输入的值为质数的时候直接返回并提示当前输入的值为质数,
//最小的质数是2,为了方便也为了规范,我们就从2开始运算。
public class Test1{
public static void main(String args[]){//主函数
zhijie(90);//输入90
}
public static void zhijie(int n){//质解函数
int[] arr=new int[100];//定义数组用来存储因子,此处长度够用即可
int pos=0;//定义指针变量用来遍历数组
for(int i=2;i<=n;i++){//定义for循环,以最小的质数2
//初始化i的值,从2作为除数开始运算
while(n!=i){//即n不是质数的时候执行while,把当前质因数分解彻底后
if(n%i==0){//当n仍是i的倍数的时候,继续进行分解直至分解尽n中的当前因子
arr[pos++]=i;//分解一次输出一个因子,说明有1个或多个当前i的值作为n的质因子
n=n/i;//分解一次后,n的值缩小i倍,进行下一次分解
}else{//当n的值已经不再包含当前i值的因子,则跳出while改变i值,遍历n 其他因子
break;
}
}
}
arr[pos]=n;//当n分解尽质因数后,当前n值已不再包含任何质因数
//(当前n值是被分解到最后的一个质因数),打印n!此处已经不需要pos自增1,上面在最后一次
//赋值给arr元素之后已经自增1;
System.out.print("90=");//打印:此处不需要再循环内执行
for(int i=0;i<pos;i++){//for循环遍历数组,格式化输出
System.out.print(arr[i]+"*");
}
System.out.println(n);
}
} |