Given a non-negative integer num
, repeatedly add all its digits until the result has only one digit.
For example:
Given num = 38
, the process is like: 3 + 8 = 11
, 1 + 1 = 2
. Since 2
has only one digit, return it.
Follow up:
Could you do it without any loop/recursion in O(1) runtime?
Hint:
- A naive implementation of the above process is trivial. Could you come up with other methods?
- What are all the possible results?
- How do they occur, periodically or randomly?
- You may find this Wikipedia article useful.
题目大意:给出一个非负数,将它每位数相加直到变成一个个位数。比如给出“38”,有“3”和“8”两位,相加得到“11”,再把“11”的每位相加,得到2,2即时最终解。
另外题目要求是否可以不使用循环来完成这个操作。
解题思路:这个问题很简单,先求出给出数字的位数个数,再通过递归去反复累加,直到数字小于10。
AC代码:
class Solution {
public:
int addDigits(int num) {
if (num < 10)
return num;
int n = 0;
int sum = 0;
n = (int)log10(num);
while (n >= 0)
{
sum += num / (int)pow(10, n);
num %= (int)pow(10, n);
n--;
}
return addDigits(sum);
}
};