1. 程式人生 > >給定一個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數

給定一個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數

示例:

輸入: 38

輸出: 2 
解釋: 各位相加的過程為3 + 8 = 11, 1 + 1 = 2。 由於2是一位數,所以返回 2。

進階:
你可以不使用迴圈或者遞迴,且在 O(1) 時間複雜度內解決這個問題嗎?

 

class Solution {
    public int addDigits(int num) {
        if(num < 10){     //10以內返回原值
            return num;
        }
        int b = 0;
        int c = 0;
        while (num >=10){
            b = num%10;  //迴圈求餘
            c +=b;//設定變數存放各餘數之和
            num = num/10;
            if(num < 10){
                num += c; //將餘數之和與最後一位餘數求和
                c = 0;//將變數賦值為空,為餘數相加大於10繼續從0迴圈
            }            
        }
        return num;
    }
}