# 【LeetCode】 258. Add Digits
## Description
> Given a non-negative integer `num`, repeatedly add all its digits until the result has only one digit.
> Follow up:
Could you do it without any loop/recursion in O(1) runtime?
> 給一個非負整數`num`,重複地把它所有位數加總,直到結果只剩個位數。
> 進階題:
> 你可以不使用任何迴圈/遞迴且在O(1)的時間複雜度完成嗎?
## Example:
```
Input: 38
Output: 2
Explanation: The process is like: 3 + 8 = 11, 1 + 1 = 2.
Since 2 has only one digit, return it.
```
## Solution
* 用`%10`取出個位數,用`/10`來移除個位數。
* 進階可以參考[這篇](https://en.wikipedia.org/wiki/Digital_root)和[這裡](https://oeis.org/A010888)。
* 裡面提到在base為10(十進位)之下,數根將會與九的模數有關,詳細證明就請自行翻閱上面參考資料。
### Code
```C++=1
class Solution {
public:
int addDigits(int num) {
while(num > 9)
{
int temp = 0;
while(num != 0)
{
temp += num % 10;
num /= 10;
}
num += temp;
}
return num;
}
};
```
```C++=1
class Solution {
public:
int addDigits(int num) {
return ((num - 1) % 9) + 1;
}
};
```
###### tags: `LeetCode` `C++`