将给定自然数的所有位相加直到数字最后只剩一位。
16 => 1 + 6 => 7;
942 => 9 + 4 + 2 => 15 => 1 + 5 => 6
132189 => 1 + 3 + 2 + 1 + 8 + 9 => 24 => 2 + 4 => 6
看了别人给出的解法:
num % 9 or n and 9
看得我一脸茫然,不知道发生了什么,在网上查找了一番理解了下这个算法。
首先假设有一个四位数为n,四位分别为a、b、c、d,则:
n % 9
= (999a + 99b + 9c + a + b + c + d) % 9
= (a + b + c + d) % 9
(a + b + c + d)得到一个数,我们使它递归到最后只剩一位数字,假设为k,则:
n % 9 = k % 9
所以数字n所有位数递归累加至一位时的结果k为:
if n % 9 == 0:
k = 9
elif n == 0:
k = 0
else:
k = n % 9
回头再看别人的解法:
num % 9 or n and 9
还是一脸茫然,因为对操作符的运行顺序不明白。又去查了下:
Operation | Result |
---|---|
x or y | if x is false, then y, else x |
x and y | if x is false, then x, else y |
not x | if x is false, then True, else False |
优先级关系:or < and < not,同一优先级默认从左往右计算
再回头看别人的解法,应该是这样:
num % 9 or (n and 9)
所以,这种还是多加括号,免得产生歧义,或者把我这种小白绕晕。
以下为参考链接
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。