leetcode:各位相加(数学办法详解)

前言:内容包括:题目,代码实现,大致思路

目录

题目:

代码实现:

大致思路:


题目:

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。

示例 1:

输入: num = 38
输出: 2 
解释: 各位相加的过程为:
38 --> 3 + 8 --> 11
11 --> 1 + 1 --> 2
由于 2 是一位数,所以返回 2。
示例 2:

输入: num = 0
输出: 0

代码实现:


int addDigits(int num)
{
	return (num - 1) % 9 + 1;
}

大致思路:

题目所求的是数字num的数根

下面列出1~30的数根 

原数: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
数根: 1 2 3 4 5 6 7 8 9  1   2   3   4   5   6   7   8   9   1   2   3   4   5   6   7   8   9   1   2   3 

可以发现:数根按照1~9的顺序循环出现

1 若是数字num是9的倍数,则数根为9

比如:9的数根是9,18的数根是9,27的数根是9

2 若是数字num不是9的倍数,则数根为num%9

比如:10的数根是1(10%9)11的数根是2(11%9) 12的数根是3(12%9)

num不是9的倍数,其数根的求法有公式:num%9

但是num为9的倍数时若也沿用num不是9的倍数时的公式,则计算错误

结合1 2两点,推出数根公式:

(num-1)%9+1

比如:若是num为9(num是9的倍数),按照num%9的公式计算,则求得的数根为0,而不是为9

所以先让num-1,变成8,那么%9的结果就不会为0,而是8,再+1即可得到正确的数根

(num-1)%9+1:

num-1:先让原数向左偏移一位

(num-1)%9:得到的结果是真正的数根值-1

(num-1)%9+1: 得到数根

原数: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
偏移: 0 1 2 3 4 5 6 7 8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 
取余: 0 1 2 3 4 5 6 7 8  0   1   2   3   4   5   6   7   8   0   1   2   3   4   5   6   7   8   0   1   2  
数根: 1 2 3 4 5 6 7 8 9  1   2   3   4   5   6   7   8   9   1   2   3   4   5   6   7   8   9   1   2   3 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值