算法:各位相加

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

目录

一、背景介绍

二、解题步骤

总结


提示:以下是本篇文章正文内容,下面案例可供参考

一、背景介绍

给定一个非负整数 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)));
}

正常解题,推荐按照本办法来,毕竟规律不好找。


总结

每天进步一点点!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值