C语言打印数字质因数代码异常:持续打印首个数字如何修复?
问题分析与修复方案
嘿,我一眼就看出你代码里的核心问题了——你在内层循环里直接修改了外层循环的控制变量i!
你看,外层循环本来是要让i从0遍历到20,但在内层的while循环里,你执行了i = i / count,这直接把外层循环的i给改了。比如第一次i=2,处理完后i变成1,外层循环执行i++后变成2,然后又被内层改成1,就这么陷入了死循环,自然只会一直打印首个数字的质因数。
下面是修复后的代码,我给你标注了关键改动:
#include <stdio.h> int main() { // 外层循环正常遍历0到20的数字 for (int i = 0; i <= 20; i++) { // 用临时变量num保存当前要分解的数字,避免修改外层的i int num = i; // 先打印当前数字,让输出更清晰(可选,但可读性更好) printf("%d的质因数:", num); // 处理0和1的特殊情况:它们没有质因数 if (num <= 1) { printf("无\n"); continue; } // 内层循环用count从2开始尝试分解num for (int count = 2; num > 1; count++) { while (num % count == 0) { printf("%d ", count); // 修改的是临时变量num,不是外层的i num = num / count; } } printf("\n"); } return 0; }
关键改动说明:
- 新增了临时变量
num = i,所有质因数分解的操作都针对num进行,完全不影响外层循环的i,这样外层循环就能正常遍历0到20的所有数字了。 - 增加了对0和1的特殊处理,因为这两个数字没有质因数,直接输出“无”会更合理。
- 新增了
printf("%d的质因数:", num);,让输出结果更易读,你可以根据需求选择保留或删除这行。
运行这段代码后,就能正常输出0到20每个数字的质因数啦!
内容的提问来源于stack exchange,提问作者i__galii
相关产品推荐
相关产品推荐

