资讯专栏INFORMATION COLUMN

Kata: 将给定自然数的所有位相加直到数字最后只剩一位

孙淑建 / 538人阅读

摘要:首先假设有一个四位数为,四位分别为,则得到一个数,我们使它递归到最后只剩一位数字,假设为,则所以数字所有位数递归累加至一位时的结果为回头再看别人的解法还是一脸茫然,因为对操作符的运行顺序不明白。

将给定自然数的所有位相加直到数字最后只剩一位。

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)

所以,这种还是多加括号,免得产生歧义,或者把我这种小白绕晕。

以下为参考链接

https://segmentfault.com/q/10...

http://blog.csdn.net/qq_28267...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40942.html

相关文章

  • 查找算法——JS算法实现

    摘要:查找表查找表相关概念查找表是由同一类型的数据元素或记录构成的集合。由于集合中的数据元素之间存在着完全松散的关系,因此查找表是一种非常灵便的数据结构。缺点平均查找长度较大。索引顺序表的查找若以索引顺序表表示静态查找表,则查找可以用分块查找。 查找表 search table 查找表相关概念 查找表是由同一类型的数据元素(或记录)构成的集合。由于集合中的数据元素之间存在着完全松散的关系,因...

    sihai 评论0 收藏0
  • 查找算法——JS算法实现

    摘要:查找表查找表相关概念查找表是由同一类型的数据元素或记录构成的集合。由于集合中的数据元素之间存在着完全松散的关系,因此查找表是一种非常灵便的数据结构。缺点平均查找长度较大。索引顺序表的查找若以索引顺序表表示静态查找表,则查找可以用分块查找。 查找表 search table 查找表相关概念 查找表是由同一类型的数据元素(或记录)构成的集合。由于集合中的数据元素之间存在着完全松散的关系,因...

    cheng10 评论0 收藏0
  • 重学计算机组成原理(十)- "烫烫烫"乱码由来

    摘要:而大写字母,就是第个,也就是二进制的,对应的十六进制表示就是。在中文世界里,最典型的就是手持两把锟斤拷,口中疾呼烫烫烫的典故。既然今天要彻底搞清楚编码知识,我们就来弄清楚锟斤拷和烫烫烫的来龙去脉。参考深入浅出计算机组成原理 showImg(https://image-static.segmentfault.com/206/872/2068726052-5d5922b2effb9_art...

    wenzi 评论0 收藏0
  • 由left-pad扯到JS中运算

    摘要:原码补码和反码原码一个数在计算机中是以二进制的形式存在的,其中第一位存放符号正数为负数为。中的位运算在中按位操作符会将其操作数转成补码形式的有符号位整数。原文链接由扯到中的位运算 这个话题的由来是2016年3月份的时候 NPM 社区发生了‘left-pad’事件,不久后社区就有人发布了用来补救的,也是现在大家能用到的 left-pad 库。 最开始这个库的代码是这样的。 module....

    LeoHsiun 评论0 收藏0
  • JavaScript常用脚本集锦7

    摘要:将加法和加上校验位能被整除。下面分别分析出生日期和校验位检查生日日期是否正确输入的身份证号里出生日期不对将位身份证转成位校验位按照的规定生成,可以认为是数字。校验位按照的规定生成,可以认为是数字。表示全部为中文为不全是中文,或没有中文。 判断是否是合理的银行卡卡号 //Description: 银行卡号Luhm校验 //Luhm校验规则:16位银行卡号(19位通用): // 1.将...

    lindroid 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<