切換
舊版
前往
大廳
主題

ZeroJudge - e345: Add Digits - 面試題 解題心得

Not In My Back Yard | 2019-08-06 22:09:16 | 巴幣 0 | 人氣 311

題目連結:


題目大意:
給定一正整數 n (0 ≦ n ≦ 2147483647)。計算 n 的每個位數之和將其作為新的「n」。重複此步驟直到 n < 10 為止。

求最後的位數和為多少,即最後的 n 值為何?

註:可以在不用迴圈或遞迴的狀況下求得解嗎?



範例輸入:
0
123
456


範例輸出:
0
6
6


解題思維:
僅管可以一位數一位數加起來,然後重複此步驟直到求得解。但是除此之外,我們也可以從數學的角度來看待給定的 n 值。

設 n = a × 10 ^ k + b × 10 ^ (k - 1) + …… + c × 10 + d ,則我們想要的是 n' = a + b + …… + c + d ,然後令 n = n' ,並回到一開始的步驟。

因為 10 除以 9 的餘數為 1 (10 模 9 ≡ 1),因此 n 模 9 ≡ a + b + …… + c + d ≡ n' 模 9 ≡ a' + b' + …… + c' + d' ≡ …… ≡ k 。如果 k = 0 ,則答案為 9 ;反之, k 即是所求。(因為 9 模 9 ≡ 0 ,所以遇到 k 為 0 可視為 9)

除非 n 為 0 ,則數位和為 0 ,而且數字 0 是唯一一個滿足數位和為 0 的數字;否則,所求則如上面得出的結果。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作