ab是一个数字,找到(a + b)^ n = ab

时间:2017-05-25 13:16:13

标签: javascript arrays math

考虑我们有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?

我该如何解决这个问题?谢谢你的回答。

1 个答案:

答案 0 :(得分:1)

  

但是for循环应该在81之后停止,对吗?我检查一下,它   在81后停止?!

确实如此。但是,sayi在每次循环迭代后递增 。因此,当sayi81时:

  1. 81 < 82为真,因此循环执行
  2. 循环体运行
  3. 完成后,sayi会增加到82
  4. 检查for循环条件 - 82 < 82为false,因此循环终止,我们继续到下一行。
  5. 如果您此时打印sayi,则会82。但是,循环最后使用81值执行,正如您所期望的那样。

    这是正常行为。请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Loops_and_iteration#for_statement,其中介绍了for循环的工作原理。请注意,最后步骤是

      

    更新表达式incrementExpression(如果有)执行,   并且控制返回到步骤2.

    第2步是条件的评估。