LeetCode OJ: 258. Add Digits數根

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結Wiki的說明:
數根是將一正整數的各個位數相加(即橫向相加),若加完後的值大於10的話,則繼續將各位數進行橫向相加直到其值小於為止,或是,將一數字重複做數字和,直到其值小於十為止,則所得的值為該數的數根
例如54817的數根為7,因為5+4+8+1+7=25,25大於10則再加一次,2+5=7,7小於十,則7為54817的數根。

由上述說明可能會讓人寫出一個每個位數相加的程式吧,不過其實有公式可以解的:
dr(n)=n-9\left\lfloor\frac{n-1}{9}\right\rfloor.

所以程式碼就很短又很快啦。
1
2
3
4
5
6
class Solution {
public:
    int addDigits(int num) {
        return num - 9 * (floor( (num-1) / 9));
    }
};

沒有留言: