考虑我们有81号码,让它分开:8和1.如果我们得到这个数字的总和,它将是9,对吧?让我们检查9的幂是否为81.是的,9的平方是81。
我想找到所有这些数字,直到它达到10000.我一直在编码,但有些东西我总是卡住。这是我的代码;
var results = [];
for (var num = 0; num < 82; num++) {
var splittedNumbersArray = num.toString(10).split("").map(Number);
var sum = splittedNumbersArray.reduce(sumof, 0);
var powersArray = [];
for (var power = 0; power < 11; power++) {
var powerNumber = Math.pow(sum, power);
powersArray.push(powerNumber);
}
if (controlSolution(powersArray, num) === true) {
results.push(num);
}
}
function sumof(a, b) {
return a + b;
}
function controlSolution(a, v) {
for (var index = 0; index < a.length; index++) {
if (a[index] === v) {
return true;
}
}
return false;
}
当我通过控制台调试代码时,它表示变量num
为82.但是for
循环应该在81之后停止,对吗?我检查一下,它在81后停止了?! (我理解这一部分。)
为什么当我输入console.log(sayi)
时它会说82?我认为这就是我的kontrolet
功能无效的原因。
当我检查powersArray
是否包含num
并且我已经看到时,它就是。但为什么results
没有数字81?
我该如何解决这个问题?谢谢你的回答。
答案 0 :(得分:1)
但是for循环应该在81之后停止,对吗?我检查一下,它 在81后停止?!
确实如此。但是,sayi
在每次循环迭代后递增 。因此,当sayi
为81
时:
81 < 82
为真,因此循环执行sayi
会增加到82
。82 < 82
为false,因此循环终止,我们继续到下一行。 如果您此时打印sayi
,则会82
。但是,循环最后使用81
值执行,正如您所期望的那样。
这是正常行为。请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#for_statement,其中介绍了for循环的工作原理。请注意,最后步骤是
更新表达式incrementExpression(如果有)执行, 并且控制返回到步骤2.
第2步是条件的评估。