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


常規思路:分別獲取num的位上的值進行相加,判斷相加后的結果result,如果result小於10,返回值,否則獲取result的位上的值進行相加,判斷相加后的結果,直到結果小於10,輸出結果

代碼:

class Solution { public int addDigits(int num) { int sum=0; while(num>9){ sum+=num%10; num/=10; } sum+=num; if(sum<10){ return sum; }else{ return addDigits(sum); } } }

不用循環和遞歸:

分析:

對於二位數ab=a*10+b:

ab%9=(10*a+b)%9=(a+b)%9

對於三位數abc=a*100+10*b+c:

abc%9=(a+b+c)%9

所以:

對於一般整數來說直接對整數進行對9求余,便可得到小於10的結果。而對於整除結果,如18,正確結果為9,而按上述規則則為0,所以不適用,通過規律可得,除0以外,能被9整除的數各位相加后其值最終為9(因為各位數相加后始終能被9整除),所以便可得出結果。

代碼:

class Solution { public int addDigits(int num) { if(num==0){ return 0; } int i=num%9; if(i==0){ return 9; }else{ return i; } } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 給定一個非負整數 num,反復將各個位上的數字相加,直到結果為一位數。 202008xx給定一個整數n(1<=n<=1000000000),要求從個位開始分離出它的每一位數字,從個位開始按照從低位到高位的順序依次輸出每一位數字(奧賽一本通p64 4題) 給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲 一位 數字。 如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。 給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,並且它們的每個節點只能存儲 一位 數字。 如果,我們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。 【c語言】輸入一個整數,將每一位數字輸出 給定兩個非空鏈表來表示兩個非負整數。位數按照逆序方式存儲,它們的每個節點只存儲單個數字。將兩數相加返回一個新的鏈表。 輸讀入一個自然數n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。 leetcode給你兩個 非空 的鏈表,表示兩個非負的整數。它們每位數字都是按照 逆序 的方式存儲的,並且每個節點只能存儲 一位 數字 Leetcode練習(Python):第415題:字符串相加:給定兩個字符串形式的非負整數 num1 和num2 ,計算它們的和。 把int放在一個char數組里(用於處理每一位數字)
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM