简体   繁体   中英

I'm trying to raise numbers to their consecutive powers and my code isn't working

https://codepen.io/aholston/pen/ZJbrjd

The codepen link has commented code as well as actual instructions in HTML

Otherwise.... what I ultimately have to do is write a function that takes two params(a and b) and takes all the numbers between those two params (ab) and put every number that can be added to the consecutive fowers and be equal to that number into a new array. Ex: 89 = 8^1 + 9^2 = 89 or 135 = 1^1 + 3^2 + 5^3 = 135

function sumDigPow(a, b) {
    // Your code here
    var numbers = [];
    var checkNum = [];
    var finalNum = [];
    var total = 0;
    for (var i = 1; i <= b; i++) {
        if (i >= a && i <= b) {
            numbers.push(i);
        }
    }

    for (var x = 0; x < numbers.length; x++) {
        var checkNum = numbers[x].toString().split('');
        if (checkNum.length == 1) {
            var together = parseInt(checkNum);
            finalNum.push(together);
        } else if (checkNum.length > 1) {
            var together = checkNum.join('');
            var togNumber = parseInt(together);

            for (var y = checkNum.length; y > 0; y--) {
                total += Math.pow(checkNum[y - 1], y);
            }
            if (total == togNumber) {
                finalNum.push(togNumber);
            }

        }
    }
    return finalNum;
}

try this:

function listnum(a, b) {
  var finalNum = [];
  for (var i = a; i <= b; i++) {
    var x = i;
    var y = i;
    var tot = 0;
    j = i.toString().length;
    while (y) {
      tot += Math.pow((y%10), j--);
      y = Math.floor(y/10);
    }
    if (tot == x)
    finalNum.push(i);
  }
  return finalNum;
}
console.log(listnum(1, 200));

Okay, after debugging this is what I learned.

          for (var y = checkNum.length; y > 0; y--) {
            total += Math.pow(checkNum[y - 1], y);
        }
        if (total == togNumber) {
            finalNum.push(togNumber);
        }

    }
}
return finalNum;

}

Everytime this loop happened, I neglected to reset the 'total' variable back to 0. So I was never getting the right answer for my Math.pow() because my answer was always adding to the previous value of total. In order to fix this, I added var total = 0; after i decided whether or not to push 'togNumber' into 'finalNum.' So my code looks like this..

for (var y = checkNum.length; y > 0; y--) {
total += Math.pow(checkNum[y - 1], y);


}
if (total == togNumber) { 


finalNum.push(togNumber);}

}
  var total = 0;
}
return finalNum;

 }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM