數根(又稱數字根Digital root)是自然數的一種性質,換句話說,每個自然數都有一個數根。
數根是將一正整數的各個位數相加(即橫向相加),若加完後的值大於等於10的話,則繼續將各位數進行橫向相加直到其值小於十爲止,或是,將一數字重複做數字和,直到其值小於十爲止,則所得的值爲該數的數根。例如54817的數根爲7,因爲5+4+8+1+7=25,25大於10則再加一次,2+5=7,7小於十,則7爲54817的數根。——百度百科
寫代碼驗證:
最簡單的方法:
遞歸一下子。
function DigitalRoot(num) {
if(num < 10) {
return num;
} else {
//把數字轉換成字符串,把每一個數字都分割出來,存到數組裏
var nums = (num + '').split('');
var sum = 0;
for(var i = 0; i < nums.length; i++) {
//遍歷取出每一個數字字符,轉換成數字並求和
sum += parseInt(nums[i]);
}
return DigitalRoot(sum);
}
}
用上算法:
function DigitalRoot1(num){
return (num-1)%9+1;
}
解釋:
ab寫成: 10a+b=9a+a+b, 這和a+b相差9a,也就是9的倍數。如果大一點也是一樣,abc寫成:100a+10b+c=99a+9b+a+b+c,和a+b+c相差9的倍數99a+9b=9 (10a+b) 。所以abcde.. .把所有的位數相加結果就是9的倍數取餘。另外先減一再加一的原因結果不會等於10,如果可以被9整除,直接取餘就會是0,這樣在計算過程中,先保證所有位數相加是取餘是0-8,這樣在結果+1時候,就會是1-9.不會出現0值。——知乎@caoglish