【leetcode】Add Digits【java】

来源:互联网 发布:java 除夕节判断 编辑:程序博客网 时间:2024/05/02 05:00

题目:

Given a non-negative integer num, repeatedly add all its digits until the result has only one digit.

For example:

Given num = 38, the process is like: 3 + 8 = 111 + 1 = 2. Since 2 has only one digit, return it.

将数的各个位相加直至和为个位数

思路:

此题为要求无递归和循环是数学问题,最后得到的一位数一定是(num-1)%9+1,(减一再加一是为了避免num=9)

假设一个多位数的最高位数的数字为X,其他位数的数字都为0,那么它余数一定是X (X不为9)

例如10除以9余1 200除以9余2
而本身就是个位数的数字只要不是9都不能整除9只能直接余
以此类推,你把多位数的数字用加法拆开然后分别除以9,得到的余数相加再除以9
以此重复就是最后的结果了
比如12345=10000+2000+300+40+5
(10000+2000+300+40+5) 除以9 余数分别是 1 2 3 4 5
1+2+3+4+5=15
再以此类推 得出 1+5=6
说穿了就是因为是10进制,单个数字值最大的数和进位的数字形成互补,要是用16进制要比10进制多出A-F这个几个数,除以9就不是这样的了.

代码:

0 0
原创粉丝点击