top1编程
← 返回题目
题解

数字加加乐

1 条题解

  • 0
    @ 2026-8-5 21:17:14

    P4423 数字加加乐(入门)

    解题思路

    "加加乐"游戏要求把数字的每一位加起来:12的各位和是1+2=3,567的各位和是5+6+7=18。求各位之和用"逐位拆开"的办法:用 n%10 取出当前最右边的个位,加进累加器s;再用 n/10 把这个个位砍掉,让十位变成新的个位。重复这两个动作,直到n变成0,s就是所有数位之和。举个例子:n=12,第一次 s=0+2=2,n=1;第二次 s=2+1=3,n=0,循环结束,输出3。边界情况:如果n是一位数,比如5,只循环一次 s=0+5=5,n=0结束,输出5;题目保证n≥1,不会出现n=0时循环一次都不执行的情况;n最大接近100000,最多6位,逐位拆开非常快。

    参考代码

    // 程序用途:输入一个正整数n,输出它各个数位数字相加的结果
    #include <iostream>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        int s = 0;                      // 数位累加器
        while (n) {                     // 逐位拆开,直到n变成0
            s += n % 10;                // 加上当前个位
            n /= 10;                    // 去掉个位
        }
        cout << s << endl;              // 输出数位之和
        return 0;
    }
    

    复杂度分析

    循环次数等于n的位数,n<100000最多6位,所以时间复杂度 O(位数),也可以说 O(log n);额外空间复杂度 O(1)。

    • 1