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


常规思路:分别获取num的位上的值进行相加,判断相加后的结果result,如果result小于10,返回值,否则获取result的位上的值进行相加,判断相加后的结果,直到结果小于10,输出结果

代码:

class Solution { public int addDigits(int num) { int sum=0; while(num>9){ sum+=num%10; num/=10; } sum+=num; if(sum<10){ return sum; }else{ return addDigits(sum); } } }

不用循环和递归:

分析:

对于二位数ab=a*10+b:

ab%9=(10*a+b)%9=(a+b)%9

对于三位数abc=a*100+10*b+c:

abc%9=(a+b+c)%9

所以:

对于一般整数来说直接对整数进行对9求余,便可得到小于10的结果。而对于整除结果,如18,正确结果为9,而按上述规则则为0,所以不适用,通过规律可得,除0以外,能被9整除的数各位相加后其值最终为9(因为各位数相加后始终能被9整除),所以便可得出结果。

代码:

class Solution { public int addDigits(int num) { if(num==0){ return 0; } int i=num%9; if(i==0){ return 9; }else{ return i; } } }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。 202008xx给定一个整数n(1<=n<=1000000000),要求从个位开始分离出它的每一位数字,从个位开始按照从低位到高位的顺序依次输出每一位数字(奥赛一本通p64 4题) 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 【c语言】输入一个整数,将每一位数字输出 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。 输读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。 leetcode给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字 Leetcode练习(Python):第415题:字符串相加:给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。 把int放在一个char数组里(用于处理每一位数字)
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM