用递归计算一个数字每一位相加的结果。_【每日编程196期】各位相加III

每日编程中遇到任何疑问、意见、建议请公众号留言或直接撩Q474356284(备注每日编程)

今日问题:

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

示例:

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

进阶:
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?


解决方法:

两个概念:

九余数定理:如果把一个大数的各位数字相加得到一个和,再把这个和的各位数字相加又得一个和,再继续作数字和,直到最后的数字和是个位数为止,

这最后的数称为最初那个数的“数字根”。

这个数字根等于原数对9的取余的余数,因此这个计算过程常常称为“合九法”

一个数对9求余的结果,成为九余数。

定理:某个数各个位上的数相加对九求余等于这个数的九余数。

例子:1234%9=1

(1+2+3+4)%9=1

二者相等。

同余定理:两个数的乘积对m取余的余数等于这两个数分别对m取余的余数的乘积。

例如:7%3=1  

5%3=2

(7*5)%3 = 2 = 1 * 2

算法思想:

运用“合九法”。让num直接对9取余即可。

注意:个位数9得单拎出来解决哦!当然还有0.

C++代码:

2223d3586c7ebfff197df08fe4538416.png

C代码:

333720c244e46686e5c435b5e0c13af6.png

Java代码:

d26c57132cc1f9362443424f01bb5fda.png


明日题目预告:

字符的最短距离

给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。

示例 1:

输入: S ="loveleetcode", C = 'e'

输出: [3, 2, 1, 0, 1,0, 0, 1, 2, 2, 1, 0]

说明:

  1. 字符串 S 的长度范围为 [1, 10000]。

  2. C 是一个单字符,且保证是字符串 S 里的字符。

  3. S 和 C 中的所有字母均为小写字母。

786a6d77ebaeff0e6427f8cb1ec72d75.png

3dcafd1e165b109747306bebcbc667a2.png

f41ff806651778e46458115fda06f06b.png

85488f244261cf2e2e186259ba6aebc8.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值