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

解析两段while循环协作实现整数各位拆分的工作原理

解析整数各位拆分代码的两段while循环逻辑

先贴出完整代码:

#include <stdio.h>

int main() {
    int num, temp, factor = 1;

    printf("Enter a 5 digit number: ");
    scanf("%d", &num);

    temp = num;
    while (temp) {
        temp = temp / 10;
        factor = factor * 10;
    }

    while (factor > 1) {
        factor = factor / 10;
        printf("%d   ", num / factor);
        num = num % factor;
    }
    return 0;
}

第一段while循环:计算位数对应的定位因子

这段循环的核心是算出一个比输入数字位数多一位的10的幂次,拿输入5位数12345举例:

  • 初始temp等于输入的12345,factor初始是1
  • 第一次循环:temp = 12345 / 10 = 1234,factor = 1 * 10 = 10
  • 第二次循环:temp = 1234 / 10 = 123,factor = 10 * 10 = 100
  • 第三次循环:temp = 123 / 10 = 12,factor = 100 * 10 = 1000
  • 第四次循环:temp = 12 / 10 = 1,factor = 1000 * 10 = 10000
  • 第五次循环:temp = 1 / 10 = 0,factor = 10000 * 10 = 100000
  • 当temp变成0时循环结束,此时factor是100000(即10的5次方)

简单说,这段循环就是数清楚输入数字的位数,生成一个能定位到最高位的放大因子,为后续拆分做准备。

第二段while循环:逐位拆分输出

这段循环用前面得到的factor,从最高位开始逐一拆分数字:

  • 初始factor是100000,满足factor > 1的条件,进入循环:
    1. factor = 100000 / 10 = 10000
    2. num / factor = 12345 / 10000 = 1——这就是最高位数字,直接输出
    3. num = 12345 % 10000 = 2345——去掉已经输出的最高位,保留剩余部分
  • 下一次循环,factor=10000仍满足条件:
    1. factor=10000/10=1000
    2. 2345/1000=2——输出第二位
    3. num=2345%1000=345——继续保留剩余部分
  • 重复这个过程,直到factor变成1:
    • 最后一次循环时,factor=10,除以10后变为1,此时num是5,5/1=5输出最后一位,num=5%1=0
    • 下一次判断factor=1>1不成立,循环结束

两段循环的协同逻辑

第一段循环相当于**“探路”:先摸清楚数字的位数,算出能定位最高位的因子;第二段循环则是“落地执行”**:用这个因子从高位到低位,依次把每一位数字“摘”出来输出,每处理完一位就缩小因子,同时截断原数字的已处理部分,直到所有位数都拆分完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:01:25