【LeeCode】- Add digital

给定一个非负整数 num,重复添加其所有数字,直到结果只有一个数字。

例如:

鉴于 num = 38,这个过程就像:3 + 8 = 11,1 + 1 = 2。由于 2 只有一位数字,请将其返回。

后续工作:
你可以在 O(1)运行时没有任何循环/递归吗?

1
2
3
function digital($num) {
return ($num - 1) % 9 +1;
}

解析:

假设现在有一个数: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