You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:42:30