Ich versuche, dieses Problem zu lösen:warum nicht gibt mir das Programm diese Meldung: ‚Programm für den Betrieb zu lange angehalten‘
Die Zahl 81 hat eine besondere Eigenschaft, eine gewisse Macht der Summe von seine Ziffern sind gleich 81 (neun Quadrat). Einundachtzig (81), ist die erste Nummer mit dieser Eigenschaft (ohne Berücksichtigung der Zahlen von einer Ziffer). Die nächste, 512. Lassen Sie uns beide Fälle mit den Details siehe
8 + 1 = 9 and 9^2 = 81 512 = 5 + 1 + 2 = 8 and 8^3 = 512
Wir brauchen eine Funktion zu machen, power_sumDigTerm()
, die eine Zahl n und ausgeben kann, die n-th
Laufzeit dieser Zahlenfolge empfängt. Die oben dargestellten Fälle bedeuten: Also habe ich das Problem wie folgt gelöst:
function findPow(sum,i) {
var counter = 0;
while (true) {
counter++;
if (Math.pow(sum,counter) === i) {
return true;
} else if (Math.pow(sum,counter) > i) {
return false;
}
}
}
function powerSumDigTerm(n) {
var index = 80;
var result = [];
function loop() {
index++;
var sum = 0;
var string = index.toString();
for (var i =0;i<string.length;i++) {
sum += Number(string[i]);
}
if (findPow(sum,index)) {
result.push(index);
}
return (n === result.length) ? result[n-1] : loop()
}
return loop()
}
hier ist das Problem, wenn ich die Funktion lief und in 1 powerSumDigTerm(1)
passieren. Die Ausgabe wäre 81 wie erwartet. Wenn wir jedoch 2 übergeben, console.log(powerSumDigTerm(2))
, gibt die Funktion eine Nachricht zurück, die besagt: Program halted for running too long, sorry!
Hat jemand irgendeine Erklärung, warum die Funktion das tut? und wie man es vermeidet?
ein Fehler bei der Programmierung logir ist, die nie die while-Schleife gehen. Sie müssen die IF-Klausel korrigieren. –
Meinst du in der findPow-Funktion? –