LintCode569

来源:互联网 发布:有了域名如何建站 编辑:程序博客网 时间:2024/06/16 09:56

个位相加

给出一个非负整数 num,反复的将所有位上的数字相加,直到得到一个一位的整数。

样例

给出 num = 38。

相加的过程如下:3 + 8 = 111 + 1 = 2。因为2 只剩下一个数字,所以返回 2

挑战 

你可以不用任何的循环或者递归算法,在 O(1) 的时间内解决这个问题么?

思路:不用递归的不清楚其中的数学原理。。但大致是和9的倍数的距离有关。

          数学链接:https://en.wikipedia.org/wiki/Digital_root

代码:

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;
        else
            return num%9==0?9:num%9;
        
        
    }
};