给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。
样例
例1:
输入:
num=38
输出:
2
解释:
过程如下: 3 + 8 = 11, 1 + 1 = 2. 因为 2 只有一个数字,返回 2.
例2:
输入:
num=9
输出:
9
解释:
9<10,返回 9.
挑战
你可以不用任何的循环或者递归算法,在 O(1) 的时间内解决这个问题么?
循环做法:
class Solution {
public:
/**
* @param num: a non-negative integer
* @return: one digit
*/
int addDigits(int num) {
// write your code here
if(num<10) return num;
else
{
int temp=0;
while(num!=0)
{
temp+=num%10;
num/=10;
if(num==0&&temp>=10)
{
num=temp;
temp=0;
}
}
return temp;
}
}
};
非循环做法:最后结果为除以9的余数
class Solution {
public:
/**
* @param num: a non-negative integer
* @return: one digit
*/
int addDigits(int num) {
// write your code here
return num==0?0:(num%9==0?9:(num%9));
}
};