#include <stdio.h>
int main()
{
int n, i;
scanf("%d", &n);
printf("%d=", n);
for (i = 2; i <= n; i++)
{
while (n % i == 0)
{
printf("%d", i);
n /= i;
if (n != 1)
printf("*");
}
}
printf("\n");
return 0;
}
程序的执行步骤如下:
首先从键盘读入一个整数n,表示待分解的数。
然后用循环从2到n依次枚举所有可能的质因数i。
对于每个质因数i,用while循环将n不断除以i,直到n无法再被i整除为止。
每次除完i之后,如果n不等于1,就输出一个乘号。
循环结束后,输出换行符。
这样,程序就能够输出n的所有质因数,并将它们从小到大相乘输出。
上面我们已经实现了基础的程序功能,这部分我们要深入细节,完成每一个小功能的实现。
可以使用循环来不断利用质因数来整除输入的数,如果可以整除打印乘号和质因数,不可以整除则质因数+1,循环结束即可打印出质因数相乘的式子,打印式子可以先打印起始的1。
代码如下:
#include <stdio.h>
int main(void){
int num;
scanf("%d",&num); // 获取输需要分解的正整数
printf("1"); // 打印式子开头的1
int factor=2; // 质因数成2开始
while(num!=1){
// printf("\nnum=%d,facotr=%d\n",num,factor);
if(num%factor==0){ // 如果当前质因数可以整除 num,则打印乘号和质因数
if(num!=1){ // 如果num没有被分解完,则打印一个乘号
printf("*");
}
printf("%d",factor); // 打印其质因数
num=num/factor; // num除去质因数
}else{ // 如果不可以整除,则质因数+1
factor++;
}
}
return 0;
}
供参考:
#include <stdio.h>
int main()
{
int n, i=2, k=0;
scanf("%d", &n);
while (n != 1)
{
if (n % i == 0)
{
if(k == 0) printf("1*");
printf(k++ == 0 ? "%d" : "*%d",i);
n /= i;
}
else {
i++;
}
}
return 0;
}