作业比赛编号 : 3088 - 【CSPtch-Jing】循环5 | 短除法

短除法:把整数拆成一个个数字

短除法:拆出每一个数字

每次取出个位,再删掉个位,整数就会被拆成一个个数字。

一、什么是“拆位”?

拆位就是把一个整数的每个数位拆出来。例如,538 可以拆成个位 8、十位 3、百位 5。

取出个位:t % 10 一个整数除以 10 的余数,就是它的个位数字。
例如:538 % 10 = 8。
删除个位:t / 10 整数除以 10 时,整数部分会去掉个位。
例如:538 / 10 = 53。

二、短除法的四个步骤

  1. 1
    准备一个整数 t,还可以准备需要用到的变量。
  2. 2
    用 t % 10 取出当前的个位数字。
  3. 3
    用 t / 10 删除当前的个位数字。
  4. 4
    只要 t > 0,就继续重复上面两步。
取余:找到末位 ge = t % 10;
变量 ge 保存刚刚取出的个位。
整除:去掉末位 t = t / 10;
更新 t,准备处理下一个数字。

三、跟着 538 走一遍

每一轮先取个位,再把个位删除。注意:数字是从右往左取出来的。
这一轮开始时的 t取出的个位 ge更新后的 t
538538 % 10 = 8538 / 10 = 53
5353 % 10 = 353 / 10 = 5
55 % 10 = 55 / 10 = 0
结果:取出的顺序是 8、3、5。当 t 变成 0 时,循环结束。

四、通用拆位模板

循环里面取出数字以后,要根据题目目的来写下一步:可以输出、判断、计算,或者重新组成一个新数字。
int t;
cin >> t;

while (t > 0) {
    int ge = t % 10;  // 取出个位数字
    t = t / 10;       // 删除个位数字

    // 在这里写题目需要的操作:
    // 输出 ge,判断 ge,或用 ge 进行计算
}
注意:如果输入可能是 0,while (t > 0) 一次也不会执行。遇到这种题目,要先按照题意单独处理 0。

五、拆位以后可以做什么?

求数位和 准备 sum = 0,每次做 sum = sum + ge。
统计数字个数 准备 count = 0,每取出一个数字就做 count++。
判断某个数字 用 if 检查 ge 是否满足条件,例如是否为偶数。
倒序重组 准备 s = 0,每轮做 s = s * 10 + ge。

倒序重组示例:538 变成 835

int t, s = 0;
cin >> t;

while (t > 0) {
    int ge = t % 10;
    t = t / 10;
    s = s * 10 + ge;  // 把取出的数字接到 s 的末尾
}

cout << s;

六、写程序时的检查清单

  • 有没有先写好变量的初始值?例如 sum = 0、s = 0。
  • 循环条件是否正确?数字变成 0 后,循环应该结束。
  • 每一轮有没有更新 t?如果忘记写 t = t / 10,循环可能停不下来。
  • 有没有检查最小输入、最大输入,以及输入为 0 的情况?
  • 完成程序后,至少用两组数字手算,逐轮检查 t、ge 和答案的变化。
记忆小口诀:取余拿末位,整除去末位;想做什么,就把操作写在循环里面。

七、练习路线

每天练习 1~2 题。动手写代码前,先用一句话说清楚:

初始状态是什么?每一轮做什么?什么时候结束?
先练“取出每一位”,再练数位和、位数统计、判断数字,最后练习数字逆序。每周把错误分成“题意、初始化、循环条件、变量更新、输出格式”几类,改起来会更快。

今天学会了:用一个循环,把整数从右到左拆成一个个数字。

比赛尚未开始或私有,不能查看题目。




返回上一页