题目本质是把一个数每一位的数反复相加,直到最后变成一个一位数。第一眼想到while循环累加每一位,但一次累加最后的数字可能还不是一位数,考虑优化想到了把低位数字对结果的贡献合并到高位部分,单循环压缩数值,最后的那一位就是结果。
整个循环我们只需要重复三件事,直到n变成一个一位数:
- 用n%10拿出最后一位的个位数字
- 用n/10删掉最后一位,留下前面的数
- 把前面的数 + 刚才拿出来的个位数字
最后附上代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
while (n >= 10)
{
int tmp = n % 10;
n /= 10;
n += tmp;
}
cout << n << '\n';
}



京公网安备 11010502036488号