我有以下问题:
写一个函数 persistence,它接受一个正参数 num 并返回它的乘法 persistence,这是你必须将 num 中的数字相乘直到达到一位数的次数。
function persistence(num) {
let count = 0;
let numStr = num.toString();
if (numStr.length === 1){
return 0
}
if (numStr.length === 2){
while (numStr.length > 1){
count += 1
numStr = (Number(numStr[0])*Number(numStr[1])).toString()
}
}
if (numStr.length === 3){
while (numStr.length > 1){
count += 1
numStr = (Number(numStr[0])*Number(numStr[1])*Number(numStr[2])).toString()
}
}
return count
}
persistence(999) //solution 4
我收到“执行超时(12000 毫秒)”错误。我知道有不同的方法可以解决这个问题,但我想具体了解我的代码出了什么问题。
最佳答案
您的代码无法正常工作的原因是您总是将 str[2]
添加到最终结果。
999 > 729 > 126 > 12 > 2
所以在这里您看到一个循环编号变为 12
并且 str[2]
是 undefined
并且它将是 NaN
所以循环永远不会结束。
一个简单的方法是在 while
中使用 reduce()
并且在相乘时不需要转换为 Number()
function persistence(num) {
let count = 0;
num = String(num);
while(num.length > 1){
count++;
num = String([...num].reduce((ac,a) => a * ac,1));
}
return count;
}
console.log(persistence(999))
关于Javascript:乘法持久性问题建议的解决方案执行超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55536199/