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

C语言多位数迭代求和代码无响应问题求助

问题原因分析

你的代码在多位数输入时卡住的核心问题是累加各位数字的逻辑错误,导致递归永远无法终止:

  • 在add_digits函数的循环里,你用atoi(&str[k])来获取每一位数字,但&str[k]指向的是从第k位开始的整个子字符串。比如输入"123"时:
    • k=0时,&str[0]是完整字符串"123",atoi返回123
    • k=1时,&str[1]是子字符串"23",atoi返回23
    • k=2时,&str[2]是"3",atoi返回3
      最终sum会变成123+23+3=149,递归处理"149"时又会重复错误逻辑,sum进一步增大,永远达不到strlen(str)==1的终止条件,陷入无限递归,程序因此卡住。

额外需注意的非致命问题

  • itoa是非标准C库函数,不同编译器支持情况不一,可移植性差,建议替换为标准的sprintf,比如sprintf(new, "%d", sum);
  • 输入内存分配时,malloc(10*sizeof(char))虽能容纳9位数字加结束符,但最好明确注释或调整为更安全的分配逻辑。

修正后的核心循环代码

把累加逻辑改成单个字符转数字(利用ASCII码连续性):

for(int k = 0; k<n ; k++){
    sum += str[k] - '0';
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:37:23