给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。
样例:
给出 num = 38。
相加的过程如下:3 + 8 = 11,1 + 1 = 2。因为 2 只剩下一个数字,所以返回 2。
挑战 :
你可以不用任何的循环或者递归算法,在 O(1) 的时间内解决这个问题么?
思路:
对于数字abcd,其值为a*1000+b*100+c*10+d,
即abcd=(a+b+c+d)+a*999+b*99+c*9,加粗部分模9为0,
对于a+b+c+d仍模9,指导最终的数字只有一位。
由于a%c%c=a%c,则结果等于num%9,当结果为0时,返回9;
#ifndef C569_H
#define C569_H
#include<iostream>
using namespace std;
class Solution {
public:
/*
* @param num: a non-negative integer
* @return: one digit
*/
int addDigits(int num) {
// write your code here
if (num <= 0)
return 0;
return num==0?9:num%9;
}
};
#endif