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

  1. 输入: 38
  2. 输出: 2
  3. 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2 由于 2 是一位数,所以返回 2

进阶:
你可以不使用循环或者递归,且在 O(1) 时间复杂度内解决这个问题吗?

循环求解

  1. class Solution {
  2. public:
  3. int addDigits(int num) {
  4. int res = num;
  5. while(res>9){
  6. num = res;
  7. res = 0;
  8. while(num>0){
  9. res += num %10;
  10. num = num / 10;
  11. }
  12. }
  13. return res;
  14. }
  15. };

数学取余法

[258]各位相加 - 图1
所以我们可得
[258]各位相加 - 图2

class Solution {
public:
    int addDigits(int num) {

        return (num - 1) % 9 + 1;

    }
};