2017-01-25 5 views
1

Ich habe den folgenden Code entwickelt, um alle armstrong Zahlen zwischen 100 und 1000 herauszufinden, aber aus irgendeinem Grund verhält sich nicht wie erwartet.PHP verschachtelte Schleife Bug

for($i=99;$i<1000;$i++){ 
    $x = str_split($i); 
    $arm = 0; 
    foreach ($x as $n){ 
     $arm = $arm + pow($n,3); 
     if ($arm == $i){ 
      echo $i."\n"; 
     } 
    } 
} 

Der Code prüft den Wert von $ i gegenüber dem Wert von $ Arm, wenn sie übereinstimmen, es i druckt $. Das bedeutet, dass $ i eine armstrong Nummer ist. die Ausgabe ist die folgende.

153 
370 
370 
371 
407 

Aus irgendeinem Grunde ist das Drucken zweimal 370, aber nach der ersten Schleife halte ich werde nur $, sobald der Wert von 370. warum ich so im zweimal 370 bekommen ???

Vielen Dank im Voraus für jede Hilfe.

+1

Da bei '370' Sie tun können: '3^3 + 7^3' was bereits gleich' 370' ist und Sie drucken die Zahl in Ihrer foreach-Schleife aus. Aber "0^3" zu "370" in der nächsten und letzten Iteration hinzuzufügen, ist immer noch gleich "370" und Sie geben die Zahl erneut aus. – Rizier123

+0

Ja. Grundsätzlich müssen Sie das 'if' nach _after_ der inneren Schleife verschieben. –

Antwort

2

Sie 370 erhalten zweimal, weil:

33 + 73 == 33 + 73 + 03 //27 + 343 == 27 + 343 + 0

versuchen, die if-Anweisung setzen nach die foreach-Schleife, wenn man alles zusammen hinzugefügt haben:

for($i = 99; $i < 1000; $i++){ 

    $x = str_split($i); 
    $arm = 0; 

    foreach ($x as $n){ 
     $arm = $arm + pow($n, 3); 
    } 

    if ($arm == $i){ echo $i . "\n"; } 

} 
+0

Danke Rizier123 für das Hinzufügen Ihrer Beiträge zu meiner Antwort. –

+2

Gern geschehen :) Sagen Sie nicht einfach zu OP, "etwas zu versuchen". Erklären Sie immer, warum Sie etwas in OPs Code geändert haben. – Rizier123