各位相加-LintCode

来源:互联网 发布:阿里云配置tomcat教程 编辑:程序博客网 时间:2024/06/06 21:39

给出一个非负整数 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