Javascript ab是一个数字,查找(a&x2B;b)^n=ab

Javascript ab是一个数字,查找(a&x2B;b)^n=ab,javascript,arrays,math,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);

假设我们有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;
}
var结果=[];
for(var num=0;num<82;num++){
var splittedNumbersArray=num.toString(10).split(“”).map(数字);
var sum=拆分的数字阵列减少(总和,0);
var powersArray=[];
用于(无功功率=0;功率<11;功率++){
var功率数=数学功率(总和,功率);
powerarray.push(powerNumber);
}
if(控制解决方案(powersArray,num)==true){
结果:推送(num);
}
}
(a,b)的功能{
返回a+b;
}
功能控制解决方案(a,v){
对于(var指数=0;指数
当我通过控制台调试代码时,它显示变量
num
为82。但是
for
循环应该在81之后停止,对吗?我也检查过了,在81后停止?!(我理解这部分。)

为什么我键入
console.log(sayi)
时会显示82?我想这就是我的
kontrolet
函数无法工作的原因

当我检查
powersaray
时,如果它是include
num
并且我已经看到了,那么它就是。但是为什么
results
没有数字81呢

我怎样才能解决这个问题?谢谢你的回答

但是for循环应该在81之后停止,对吗?我也检查过了,是吗 在81后停车

是的。但是
sayi
在每次循环迭代后都会递增。所以当
sayi
81
时:

  • 81<82
    为true,因此循环执行
  • 循环体运行
  • 完成后,
    sayi
    增加到
    82
  • for循环条件被选中-
    82<82
    为false,因此循环终止,我们继续下一行 如果此时打印
    sayi
    ,它将是
    82
    。但是循环最后一次执行时使用的值是
    81
    ,正如您所期望的那样

    这是正常的行为。请参见描述for循环如何工作的部分。请注意,最后一步是

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


    第2步是评估条件。

    因为逻辑是。。。将数字增加1并存储该值,运行检查以查看其是否有效。。。。如果数字无效,它不会将其还原…循环在sayi=82时停止,即在它达到81后停止。我不是说这是错误的,但用母语而不是英语命名变量和函数会使理解代码的功能变得更加困难,当您向不懂该语言的其他人寻求帮助时,这可能会有问题,例如在StackOverflow上。当我运行它时,
    kontrolet
    函数中的
    I
    未定义。我支持这一点。你能帮我们把函数名翻译成英语吗?我说英语的大脑很难理解。我理解为什么它显示82,但为什么我的代码不起作用?我检查了
    powersArray
    num
    ,数组中包含数字,但为什么它不推送?我不确定问题出在哪里-当我运行代码81时,结果是
    中的,这是您想要的吗?看这里:是的,这就是我想要的。我又试了一遍代码,它成功了。谢谢你所做的一切。