【leetcode】Add Digits【java】
2015-08-16 22:24
411 查看
题目:
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 = 11, 1
+ 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就不是这样的了.
代码:
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 = 11, 1
+ 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就不是这样的了.
代码:
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统