給定乙個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數。
示例:
輸入:
38輸出:
2 解釋: 各位相加的過程為:3+8
=11,1
+1=2。 由於 2 是一位數,所以返回 2。
思路:
取出資料的每一位,進行相加,直至滿足條件。
int
adddigits
(int num)
sum +
= num;
if(sum <10)
else
}
其他方法:
假設乙個三位數整數是abc:
即:abc=100a+10b+c
各位相加即:a+b+c;
兩者的差值:100a+10b+c-(a+b+c)=99a+9b,差值可以被9整除,說明每次縮小9的倍數;
對於一般整數來說直接對整數進行對9求餘,便可得到小於10的結果;但對於整除結果,如108,正確結果為9,而按上述規則則為0,所以不適用;
能被9整除的數各位相加後其值最終為9(因為各位數相加後始終能被9整除;
那麼我們可以對res=num%9,若不為0則返回res,為0則返回9;
int
adddigits
(int num)
if(num %9==
0)return num %9;
}
2018 10 25 各位相加
給定乙個非負整數num,反覆將各個位上的數字相加,直到結果為一位數。示例 輸入 38輸出 2解釋 各位相加的過程為 3 8 11,1 1 2。由於2是一位數,所以返回 2。高階 你可以不使用迴圈或者遞迴,且在 o 1 時間複雜度內解決這個問題嗎?class solution object def a...
LeetCode 各位相加
給定乙個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數。示例 輸入 38 輸出 2 解釋 各位相加的過程為 3 8 11,1 1 2。由於 2 是一位數,所以返回 2。高階 你可以不使用迴圈或者遞迴,且在 o 1 時間複雜度內解決這個問題嗎?思路分析 直接遞迴或者迴圈。遞迴版class...
258 各位相加
給定乙個非負整數 num,反覆將各個位上的數字相加,直到結果為一位數。示例 輸入 38 輸出 2 解釋 各位相加的過程為 3 8 11,1 1 2。由於 2 是一位數,所以返回 2。高階 你可以不使用迴圈或者遞迴,且在 o 1 時間複雜度內解決這個問題嗎?遞迴 c class solution re...