题目本质是把一个数每一位的数反复相加,直到最后变成一个一位数。第一眼想到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';
}