演算法 int各位相加

2021-10-10 15:24:55 字數 762 閱讀 5243

給定乙個非負整數 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...