题目链接:点击这里
模拟:
class Solution {
public:
int addDigits(int num) {
int sum = 0;
while(1)
{
while(num != 0)
{
sum += num%10;
num /= 10;
}
if(sum >= 10)
{
num = sum;
sum = 0;
}
else
break;
}
return sum;
}
};
观察两位数的情况:
38
=
3
∗
10
+
8
38 = 3*10+8
38=3∗10+8
38
%
9
=
(
3
∗
9
+
3
+
8
)
%
9
=
(
3
+
8
)
%
9
=
2
38 \ \% \ 9 = (3*9+3+8)\ \% \ 9 = (3+8)\ \% \ 9 = 2
38 % 9=(3∗9+3+8) % 9=(3+8) % 9=2
三位数的情况:
387
=
3
∗
100
+
8
∗
10
+
7
387 = 3*100 + 8*10 +7
387=3∗100+8∗10+7
387
%
9
=
(
3
∗
99
+
8
∗
9
+
3
+
8
+
7
)
%
9
=
(
3
+
8
+
7
)
%
9
=
0
387 \ \% \ 9 = (3*99+8*9+3+8+7)\ \% \ 9 = (3+8+7)\ \% \ 9 = 0
387 % 9=(3∗99+8∗9+3+8+7) % 9=(3+8+7) % 9=0
模
9
9
9 的结果为
[
0
,
8
]
[0,8]
[0,8],而我们想要除了
0
0
0 以外,其余的是
[
1
,
9
]
[1,9]
[1,9],即特例
18
%
9
18 \ \% \ 9
18 % 9 为
0
0
0 时,我们想要结果为
9
9
9,所以用到一个小技巧(num-1)%9 + 1
。
class Solution {
public:
int addDigits(int num) {
if(num==0) return 0;
return (num-1)%9 + 1;
}
};