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

计算大n(≈100)的n!结果错误,求C语言数组实现修复方案

大阶乘计算代码错误分析与修正

问题根源

  • 数组未初始化:局部数组a[1000]未初始化,未赋值的元素是随机垃圾值,当错误扩展数组长度时会输出这些随机数。
  • 进位处理逻辑错误:在每一位计算时,只要有carry就直接赋值给下一位并增加数组长度n,这会导致同一次乘法循环中重复处理进位,甚至将多位数的carry直接存入单个数组元素(违反每个元素存一位数字的设计),最终计算混乱。

修正后的代码

#include <stdio.h>
#include <string.h>

int main()
{
    int a[1000];
    memset(a, 0, sizeof(a)); // 初始化数组所有元素为0,避免随机值干扰
    int n = 1;
    a[0] = 1;
    int limit = 100;
    for (int i = 2; i <= limit; i++) {
        int carry = 0;
        // 遍历当前所有有效位数,计算每一位结果与进位
        for (int j = 0; j < n; j++) {
            int prod = a[j] * i + carry;
            a[j] = prod % 10;
            carry = prod / 10;
        }
        // 处理剩余的进位(可能是多位数)
        while (carry > 0) {
            a[n] = carry % 10;
            carry = carry / 10;
            n++;
        }
    }
    // 从高位到低位输出结果
    for (int i = n - 1; i >= 0; i--)
        printf("%d", a[i]);

    return 0;
}

修正说明

  1. 用memset初始化数组所有元素为0,彻底避免未初始化的随机值影响输出。
  2. 将进位处理逻辑移到当前有效位数遍历完成之后:通过循环拆分多位数carry,依次存入数组,确保每个数组元素仅存储一位数字,同时正确扩展有效长度n,避免同一次乘法中重复修改n导致的循环异常。

内容的提问来源于stack exchange,提问作者SF40

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:34:55