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

C语言使用while循环计算数字各位之和的代码问题求解

问题根因

你当前代码输出数值异常偏大,和char数组类型本身无关,核心原因是你累加的是字符对应的ASCII编码值,而非字符代表的数字数值:数字字符'0'的ASCII值为48、'1'为49,以此类推,直接相加的结果自然会远高于预期。

解决方法

由于ASCII编码中数字字符是连续排列的,只需在累加时用arr[i] - '0'即可快速将字符转换为对应的整数数值。

调整后可运行代码

int main()
{
    char arr[1000000];
    int i = 0;
    int sum = 0;

    printf("type the number = ");
    scanf("%s", arr);

    while(arr[i] != '\0'){
        // 只累加数字字符,过滤非法输入
        if (arr[i] >= '0' && arr[i] <= '9') {
            sum = sum + (arr[i] - '0');
        }
        i++;
    }

    printf("the total number is = %d", sum);
    return 0;
}

可选优化建议

  • 你定义的1MB大小char数组属于栈上变量,在部分栈空间限制较小的运行环境中可能触发栈溢出,如果需要处理超长数字,可以改为静态数组或者动态申请堆内存存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:09:04