2017-01-25 4 views
1

Я разработал следующий код, чтобы узнать все числа armstrong от 100 до 1000, но по какой-то причине не ведет себя так, как ожидалось.PHP вложенная петля Ошибка

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"; 
     } 
    } 
} 

код проверяет значение $ я против значения $ руки, если он соответствует, он печатает $ я. Это означает, что $ i является номером armstrong. выход следующий.

153 
370 
370 
371 
407 

По какой-то причине печати в два раз 370, но в соответствии с первым контуром $ я буду иметь место только после того, как значения 370. Так почему им я получаю в два раза 370 ???

Заранее благодарим за любую помощь.

+1

Потому что '370' вы делаете: '3^3 + 7^3', который уже равен' 370', и вы печатаете номер в вашем цикле foreach. Но добавление '0^3' в' 370' в следующей и последней итерации по-прежнему равно '370', и вы снова выводите номер. – Rizier123

+0

Да. В основном вам нужно переместить 'if' в _after_ внутренний цикл. –

ответ

2

Вы получаете 370 дважды, потому что:

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

Попробуйте поставить, если заявление после петли Еогеаспа когда вы добавили все вместе:

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

Спасибо Rizier123 за добавление ваших вкладов в мой ответ. –

+2

Добро пожаловать :) Не просто скажите OP, чтобы «попробовать что-то». Всегда объясняйте, почему вы что-то изменили в коде OP. – Rizier123

Смежные вопросы