数位之和

反复取十进制末位并除以 10,累加所有数位。

OJ: shumeng

题目 ID: CSP201512A

难度:入门

标签:模拟数位

日期: 2026-07-31 16:21

形式化题目

给定一个非负整数 nn0n1090 \le n \le 10^9),求它所有十进制数位之和。

思路

十进制数位有两个基本运算:

  • n % 10 取出最低位;
  • n / 10 删除最低位。

不断重复这两个操作并累加取出的最低位,直到 n 变为 0 即可。注意 nn 可能等于 0,此时循环一次都不执行,答案保持初值 0。

代码

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-07-31 16:21
 * update_at: 2026-08-17 22:59
 */
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    int answer = 0;
    // n%10 取出末位累加,n/10 删除末位,直到 n 变为 0。
    while (n > 0) {
        answer += n % 10;
        n /= 10;
    }
    cout << answer << '\n';
    return 0;
}

复杂度

  • 时间:设数位数为 ddd10d \leqslant 10O(d)O(d)
  • 空间:常量空间,O(1)O(1)

总结

取模和整除是十进制数位模拟的基本操作。本题是数位类问题的入门题,后续的数位分离、数位统计题都会用到同样的 %/ 组合。