提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、背景介绍
给定一个非负整数 num
,反复将各个位上的数字相加,直到结果为一位数
输入:38
输出: 2 解释: 各位相加的过程为:3 + 8 = 11
,1 + 1 = 2
。 由于2
是一位数,所以返回 2
二、解题步骤
解题思路:
这个题,最简单的做法就是从前到后遍历每一位数字,然后执行各位相加,直到最后的结果介于0-9之间。
下面说一下另一种思路:
我们先来看小于9的数字,是不是最后的结果直接就是该数字本身,那么对于这种场景,结果=数字%9。
等于9,最后的结果是9
对于大于9的场景,我们抓一下重点,因为逢10,要重新计算,那么我们看
10=9+1 结果1
20=2*(9+1)=2*9+2*1 结果2
100=10*(9+1)=10*9+10*1=10*9+(9+1)*1=10*9+9*1+1*1 结果1
是不是可以看出,结果跟对9取余有关
123456=13717*9+3 我们再随便来个数字,按原始方法计算一下
1+2=3 3+3=6 6+4=10 1+0=1 1+5=6 6+6=12 1+2=3
这么神奇吗,再来一组看看
64848=7205*9+3
6+4=10 1+0=1 1+8=9 9+4=13 1+3=4 4+8=12 1+2=3
那么总结出来规律之后,怎么变成代码呢?
1)数字为0或者为9的倍数时,结果为0
2)数字不为0和9时,结果为对9取余的余数
代码示例:
@Test
public void test(long num) {
System.out.println(num == 0 ? 0 : (num % 9 == 0 ? 9 : (num % 9)));
}
正常解题,推荐按照本办法来,毕竟规律不好找。
总结
每天进步一点点!