алгоритм поиска чисел Армстронга выдает ошибку
Натуральное число из n цифр является числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому числу (например, 153). Получить все числа Армстронга, меньшие n(в n до 4 цифр)
var n;
function armstrong(n) {
var i, j, low, lst, rest, sum, tmp, upp;
lst = [];
for (i = 1; i <= n; i += 1) {
low = Math.pow(10, (i - 1));
upp = Math.pow(10, i);
for (j = low; j < upp; j += 1) {
tmp = j;
sum = 0;
while (j > 0) {
rest = (j % 10);
sum += Math.pow(rest, i);
j = (j - rest) / 10;
}
if (sum == tmp) {
lst.push(tmp);
}
}
}
return lst;
}
n = 1;
console.log(armstrong(n));
выдаёт heap out of memory
если закомментировать некоторые строки:
var n;
function armstrong(n) {
var i, j, low, lst, rest, sum, tmp, upp;
lst = [];
for (i = 1; i <= n; i += 1) {
low = Math.pow(10, (i - 1));
upp = Math.pow(10, i);
for (j = low; j < upp; j += 1) {
tmp = j;
sum = 0;
//while (j > 0) {
rest = (j % 10);
sum += Math.pow(rest, i);
//j = (j - rest) / 10;
//}
if (sum == tmp) {
lst.push(tmp);
}
}
}
return lst;
}
n = 1;
console.log(armstrong(n));
выдаёт массив чисел до 10ти
Ответы (3 шт):
function armstrong(num) {
const lst = [];
for (let i = 1; i <= num; i++) {
const digits = (i + '').split('');
const sum = digits.reduce((a, i) => a + Math.pow(i, digits.length), 0);
if (sum == i)
lst.push(i);
}
return lst;
}
console.log(armstrong(9999));
let armstrong = n => [...Array(n + 1)].map((_, i) => i + 1).filter(e => [...'' + e].reduce((a, c) => a + c ** ('' + e).length, 0) == e);
console.log(armstrong(10));
console.log(armstrong(9999));
Для примера код на питоне, который РАБОТАЕТ, а на js так не выходит, хотя логика та же
def armstrong(n):
lst=[]
for i in range(1,n+1):
low=10**(i-1)
upp=10**i
for j in range(low,upp):
tmp=j
sum=0
while j > 0:
rest=j%10
sum+=rest**i
j//=10
if sum == tmp:
lst.append(tmp)
return lst
print(armstrong(4))
функция по условию должна использовать только формулы, никаких split и т д. n - количество цифр в числе, от которого и пляшет вся программа если вызываем функцию от n=3, то функция возвращает массив числе Армстронга до 999 включительно в самом вопросе мой код, я просто не могу разобраться в его работе. попытка добавить лишнее условие и поставить break - успехом не увенчалась