我从Henry那里找到了答案
int sum = n % 9;
if (sum == 0) sum = 9;
这里
任何人都可以解释添加数字和余数是如何相关的吗?
我的逻辑也如下所述,上面的链接也提到了
int sum = 0;
while (n > 9 ) {
sum=0;
while (n > 0) {
int rem;
rem = n % 10;
sum = sum + rem;
n = n / 10;
}
n = sum;
}
但是2行答案很棒。
答案 0 :(得分:2)
在Java中,整数的范围有限,因此提醒 O(1)渐近复杂。
现在回答你的主要问题:
任何人都可以解释如何添加数字和余数 相关?
首先请注意,除以9作为其数字之和时,任何数字n
都具有相同的提醒。如果这似乎不是很明显,这里是一个证明的草图。
<强>证明强>
让nk,...,n2,n1,n0
成为数字k+1
的{{1}}位数。
让n
表示10^p
- 10的幂。
然后
p
现在请注意,最后一行是数字n = 10^k * nk + ... + 100 * n2 + 10 * n1 + n0 =
= (10^k - 1) * nk + ... + (100-1) * n2 + (10-1) * n1 +
+ nk + ... + n2 + n1 + n0
n
让
S0 = nk + ... + n2 + n1 + n0
可以被9整除,因为对于所有 S1 = (10^k - 1) * nk + ... + (100-1) * n2 + (10-1) * n1
,10^p - 1 = 9...9
可以被9整除。
由于p > 0
和S1可被9整除,因此S0%9 = n%9。
这就是我们想要证明的内容
现在让n = S1 + S0
表示返回数字S(n)
的数字总和的函数,然后正如我们刚刚观察到的那样
n
我们可以继续处理,直到达到一位数字。
这是提醒和数字之和相关的方式。