[英]Reduce a multi-digit to one-digit -guidance not answer please
目標:取一個像54321的數字,將數字加在一起(5 + 4 + 3 + 2 + 1 = 15),然后取那個數字(15)加數字(1 + 5 = 6),所以返回6;
這是我的代碼:
function digital_root(n) {
if (n >=10) {
var digits = n.toString().split('').map(function(item, index) {return parseInt(item)}).reduce(function(a,b){ return a+b});
console.log(digits);
}
}
digital_root(1632)
無法弄清楚:如何使該功能不斷重復直到數字只是一個數字(即小於10)。 我嘗試了各種嵌套函數,但似乎無法正確完成。
如果可能的話,請向我指出解決方案的方向(“嘗試一會兒嵌套...或繼續閱讀...”),但不要給我完整的代碼解決方案(“使用此代碼塊:。 ...”)。 我養成了只閱讀和復印的壞習慣...
謝謝!
試試這個:參考這里
function digital_root(n) { var singlesum = 0; while (n >= 10 ) { singlesum=0; while (n > 0) { var rem; rem = n % 10; singlesum = singlesum + rem; n = parseInt(n / 10); } n = singlesum; } console.log(singlesum); } digital_root(1632)
您可以使用遞歸來解決此問題。 編寫一個函數makeSingleDigit
,該參數將是您的數字。 您需要具有基本步驟的基本條件,在您的情況下,當收到的數字為一位數字時,它將停止遞歸並返回該數字。 如果條件不成立, makeSingleDigit(Math.floor(n/10))
需要從數字中makeSingleDigit(Math.floor(n/10))
n%10
即可得到另一個數字,然后將其與makeSingleDigit(Math.floor(n/10))
相加。 這樣,您可以反復求和新數字的位數,直到函數收到一位數字為止。
僅供您參考的數學解決方案:您要查找的數字是n % 9 === 0 ? 9 : n % 9
n % 9 === 0 ? 9 : n % 9
,如果不是0,則為除以9的余數,否則為9。
好吧,這不是一個很好的解決方案,但是您可以大放異彩。
function digital_root(n) {
if (n >=10) {
var digits = n.toString().split('').map(function(item, index) {return parseInt(item)}).reduce(function(a,b){ return a+b});
console.log(digits);
return(digits);
}
}
var num = 1632;
do{
num = digital_root(num);
}while(num>10);
這是解決該問題的最佳方法:
function digital_root(n) { return (n - 1) % 9 + 1; } const result = digital_root(1632); console.log(result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.