题解
数字加加乐
1 条题解
-
0
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