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

C语言atoi函数中10*n的作用是什么?10如何分隔数字位?

参考代码
int atoi(char s[])
{
    int i, n;

    n = 0;
    for ( i = 0 ; s[i] >= '0' && s[i] <= '9' ; ++i )
    {
        n = 10 * n + (s[i] - '0');
    }
    return n;
}
10 * n 逻辑解释

10 * n的核心作用是将已经解析完成的高位数字整体提升一个十进制位,再和新解析出的个位数字相加,最终拼接成完整的数值。

我们以输入字符串为"123"的场景推演完整运行过程:

  • 初始状态:n=0,遍历到第一个字符s[0] = '1',s[i] - '0'转换得到数字1
  • 第一次运算:n = 10 * 0 + 1 = 1,对应当前解析到的数值为1
  • 遍历到第二个字符s[1] = '2',转换得到数字2
  • 第二次运算:n = 10 * 1 + 2 = 12,对应当前解析到的数值为12
  • 遍历到第三个字符s[2] = '3',转换得到数字3
  • 第三次运算:n = 10 * 12 + 3 = 123,正好是字符串对应的整数值

如果去掉表达式中的10 * n,就不会对高位做升位处理,只会对所有数字字符转换后的数值做求和:

  • 第一次运算:n = 0 + 1 = 1
  • 第二次运算:n = 1 + 2 = 3
  • 第三次运算:n = 3 + 3 = 6
    和你观察到的运行结果一致。

补充说明:这里乘10是适配十进制的计数规则,每一位的位权是10的幂次,每向后读取一位,之前已经解析完的所有位的位权都会提升10倍,所以需要先乘10再追加新的个位数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 07:09:04