在代码大战中,我正在训练一个乘法逆项目。例如,目标是 - 如果“39”是输入,则输出应为“4”[39 = 3 * 9 ==> 27 = 2 * 7 => 14 = 1 * 4 ==> (4)]。 我写了一些代码,它只是将输入乘以第一级(39 ==> 27)。
我的代码到现在为止,
function persistence(num) {
var digits = new Array();
digits = num.toString().split("").map(Number);
var res = 1;
for (i = 0; i < digits.length; i++) { res = res * digits[i]; }
return res;
console.log(persistence(digits));
}
我只是在学习javascript而且我被困在这里。我需要循环这个过程,直到我得到一位数字。
有人可以帮助我吗? 对不起,如果我的问题不明确......
答案 0 :(得分:2)
数组方法是你的朋友。在这种情况下,请使用map
和reduce
:
function multiplyDigits(num) {
if (num < 10) return num;
console.log(num);
const multiplied = String(num)
.split('')
.map(Number)
.reduce((a, n) => a * n, 1);
return multiplyDigits(multiplied);
}
console.log(multiplyDigits(39));
答案 1 :(得分:0)
除格式外,这与您的代码非常相似。我只评论了两个变化:
function persistence(num) {
var digits = new Array();
digits = num.toString().split("").map(Number);
// 1) Added this if statement to return the result
// immediately if there is only one digit.
if ( digits.length === 1 )
return digits[0];
var res = 1;
for (i = 0; i < digits.length; i++)
res = res * digits[i];
// 2) Changed from `return res;` so that the function you wrote
// is called again on the result (if there were more than one digit).
return persistence(res);
}
console.log(persistence('39'));
您可以使用以下解决方案:
function persistence(num) {
return num < 10
? num
: persistence( (num+'').split('').reduce( (a,b) => a*b ) );
}
console.log(persistence('39'));