You need to enable JavaScript to run this app. C语言如何遍历整数各位数字?模10运算原理及代码示例
优惠活动
大模型
产品
解决方案
定价
更多

C语言如何遍历整数各位数字?模10运算原理及代码示例

逐位遍历整数的核心原理

模10运算为什么能拿到最后一位数字

我们日常使用的十进制整数,本质是按10的幂次组合的数值结构:比如123 = 1*100 + 2*10 + 3*1。按照数学上带余除法的规则,任意整数模10得到的结果,是该数除以10后的非负余数。而由于所有高位部分都是10的整数倍,除以10不会产生余数,只有最右侧的个位数会贡献这个余数,因此模10的运算结果必然等于整数的最后一位数字。
实际运算验证:

  • 456 % 10 = 6,和最后一位完全一致
  • 7890 %10 =0,和最后一位为0的实际情况匹配

如何配合整数除法实现完整遍历

拿到最后一位数字后,我们需要把已经处理过的位从原数上去掉,才能继续处理前一位。这里用到C语言的整数除法规则:正整数做除法时会直接截断小数部分(向0取整),比如123 /10 =12,相当于把最后一位3删掉,剩下的12就是原数去掉最后一位后的高位部分。
完整的遍历逻辑就是循环执行两个操作,直到原数变为0:

  1. 用模10取出当前的最后一位数字
  2. 用整数除以10删掉已经处理过的最后一位
你现有代码的问题定位

你的代码完全没有输出,核心是循环逻辑存在两处关键错误,直接导致程序卡死:

  • x的更新逻辑写错了:你在循环内写的是x = x %10,这一步会直接把整个x替换成最后一位的个位数,根本不是删掉最后一位的操作。比如x=123的时候,第一次循环跑完x就变成了3,后面不管循环多少次,3模10的结果永远是3,会一直满足x>0的循环条件,直接陷入无限循环,程序永远跑不到后面的输出语句,自然啥输出都没有。
  • 累加的逻辑也不对:你是把整个x的值直接往计数器上加,根本没有单独把每一位数字拆出来累加,就算循环能正常跑完,算出来的结果也完全不对。
修正后的可运行代码

下面的代码严格使用基础运算实现逐位求和,没有任何复杂高阶操作:

#include <stdio.h>
int main(void)
{
    printf("Enter a value.\n");
    int x = 0;
    scanf("%d", &x);
    // 输入合法性校验:仅处理非负整数
    while (x < 0)
    {
        printf("Enter another integer please.\n");
        scanf("%d", &x);
    }
    int counter = 0;
    // 逐位遍历求和
    while (x > 0)
    {
        // 取出当前最后一位数字
        int current_digit = x % 10;
        counter = counter + current_digit;
        // 删掉已经处理完成的最后一位
        x = x / 10;
    }
    printf("The total sum of the integer's digits are %d\n", counter);
    return 0;
}

运行流程示例

以输入1234为例,循环执行过程为:

  • 第1轮:x=1234,取最后一位4,counter累计为4,x更新为123
  • 第2轮:x=123,取最后一位3,counter累计为7,x更新为12
  • 第3轮:x=12,取最后一位2,counter累计为9,x更新为1
  • 第4轮:x=1,取最后一位1,counter累计为10,x更新为0,退出循环
    最终输出各位和为10,和手动计算的结果一致。如果输入为0,循环不会进入,counter保持初始值0,也符合0的各位和的实际情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 00:36:04