给定一个非负整数 num,重复添加其所有数字,直到结果只有一个数字。
例如:
鉴于 num = 38,这个过程就像:3 + 8 = 11,1 + 1 = 2。由于 2 只有一位数字,请将其返回。
后续工作:
你可以在 O(1)运行时没有任何循环/递归吗?
1 | function digital($num) { |
解析:
假设现在有一个数:1000A+100B+10*C+D,分别表示了前位、百位、十位、个位(A、B、C、D),我们可以分解成 (A+B+C+D)+ (999A + 99B + 9C)。这样子的话,我们得到了
1 | y = (A+B+C+D)+ (999A + 99B + 9C); |
(999A + 99B + 9C + D)一定是 9 的倍数,所以 A+B+C+D = y % 9