簡體   English   中英

將多位數減少為一位-指導請不要回答

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM