题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,i;
printf("请输入一个自然数:");
scanf("%d",&n);
printf("\n%d=",n);
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{
printf("%d*",i);
n=n/i;
}
else{break;}
}
}
printf("%d",n);
return 0;
}
问题处理:
1、打印星号。
初始设计程序时,在打印时直接跟着数字后面,但逻辑中,在for循环内就会把所有的质因数找出来,导致最后一个数字后面会跟着星号:
.......
for(i=2;i<=n;i++)
{
while(1)
/*此循环根据for的判断,会把最后一个质因数(n本身)也算进去*/
{
if(n%i==0)
{
printf("%d*",i);
n=n/i;
}
else{break;}
}
}
......
}
此时,有两种思路:第一是打印形式为“星号+数字”,星号放前面,这样最后一个数字就直接结束了。但第一个数字前会打印星号,需把第一个数字从循环中摘出来。
第二就是“数字+星号”,导致的结果是最后一个数字后有星号。只需把最后一个数字从循环中摘出来即可。
考虑方便性,最后一个数字是循环后的“n”本身,易脱离循环。若想第一数字脱离循环,还需写一个确定第一个质因数的循环来确定,比较麻烦。
2、算法优化空间
质因数分解中,i肯定都是质数,但上面程序i是从2开始,逐一增加的。可考虑再次优化下。