function AdditivePersistence(num) {
var count = 0;
while (num.toString().length > 1) {
count++;
var num = calcVal(num);
}
return count;
function calcVal(str) {
var sum = 0;
var arr = str.toString().split("");
for (var i of arr) {
sum = sum + arr[i];
}
return parseInt(sum.toString());
}
}
console.log(AdditivePersistence(2233));
calcValue
函数返回数组数的总和,而循环重复直到返回的数字长度为1。
当您用于... of ... of, i
是数字而不是数字索引。另外,您需要解析数字。
sum = sum + parseInt(i, 10); // i is the number, not the index
由于您使用i
作为索引,因此calcVal()
的结果始终是长度> 2的字符串,这意味着在您的情况下是无限的环路。
固定代码:
function AdditivePersistence(num) {
var count = 0;
while (num.toString().length > 1) {
count++;
num = calcVal(num);
}
return count;
function calcVal(str) {
var sum = 0;
var arr = str.toString().split("");
for (var i of arr) {
sum = sum + parseInt(i, 10); // i is the number, not the index
}
return sum;
}
}
console.log(AdditivePersistence(2233));