将多位数减少到一位数 - 请指导不回答
Reduce a multi-digit to one-digit -guidance not answer please
目标:取一个数字,如 54321,将数字相加 (5+4+3+2+1 = 15),然后取该数字 (15) 加上数字 (1+5 = 6),所以return6;
这是我的代码:
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)。我尝试了各种嵌套函数,但似乎无法正确使用。
如果可能请指出解决方案的方向("try a nesting in a while... or read up on..."),但不要给我完整的代码解决方案("Use this code chunk:....")。我已经养成了只看书抄抄的坏习惯...
谢谢!
试试这个:参考 HERE
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)
嗯,这不是一个很好的解决方案,但你可以试试。
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);
你可以使用递归来解决这个问题。
写一个函数 makeSingleDigit
,参数就是你的数字。
您需要一个带有基本步骤的基本条件,在您的情况下,当收到的数字是 one-digit 和 returns 时停止递归。
如果条件不成立,您只需要从 n%10
的数字中获取另一个数字并将其与 makeSingleDigit(Math.floor(n/10))
相加。这样,您重复对新数字的数字求和,直到函数接收到 one-digit 个数字。
数学解仅供参考:你要求的数是n % 9 === 0 ? 9 : n % 9
,所以不为0就是9除的余数,否则就是是 9.
下面是问题的最佳解决方案:
function digital_root(n) {
return (n - 1) % 9 + 1;
}
const result = digital_root(1632);
console.log(result);
目标:取一个数字,如 54321,将数字相加 (5+4+3+2+1 = 15),然后取该数字 (15) 加上数字 (1+5 = 6),所以return6;
这是我的代码:
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)。我尝试了各种嵌套函数,但似乎无法正确使用。
如果可能请指出解决方案的方向("try a nesting in a while... or read up on..."),但不要给我完整的代码解决方案("Use this code chunk:....")。我已经养成了只看书抄抄的坏习惯...
谢谢!
试试这个:参考 HERE
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)
嗯,这不是一个很好的解决方案,但你可以试试。
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);
你可以使用递归来解决这个问题。
写一个函数 makeSingleDigit
,参数就是你的数字。
您需要一个带有基本步骤的基本条件,在您的情况下,当收到的数字是 one-digit 和 returns 时停止递归。
如果条件不成立,您只需要从 n%10
的数字中获取另一个数字并将其与 makeSingleDigit(Math.floor(n/10))
相加。这样,您重复对新数字的数字求和,直到函数接收到 one-digit 个数字。
数学解仅供参考:你要求的数是n % 9 === 0 ? 9 : n % 9
,所以不为0就是9除的余数,否则就是是 9.
下面是问题的最佳解决方案:
function digital_root(n) {
return (n - 1) % 9 + 1;
}
const result = digital_root(1632);
console.log(result);