Доброго времени суток. Пытаюсь постичь азы PHP путем решения как мне казалось несложных задачек. Не получается написать код, который проверяет, равно ли число сумме своих цифр, возведенных в степень, равную позиции в числе (в гугле Disarium Number) (например число 135, 1^1+3^2+5^3 = 135). Проблема в строке 49. Проверка проходит корректно только с натуральными числами (0-9), с числом 135, которое соответствует условиям, результат отрицательный. Обьясните новичку, почему так? Самостоятельные поиски в сети ни к чему не привели. Спасибо. PHP: <!DOCTYPE html> <html> <head> <title>Disarium numbers</title> </head> <body> <form action="disariumn.php" method="post"> <p>Введите число<input name="number" type="text"></p> <p><input type='submit' value='Проверить'></p> </form> <?php if($_SERVER['REQUEST_METHOD'] == 'POST') { $number=$_POST['number']; if(is_numeric($number) == FALSE){ echo 'Bведите число'; } echo '<br><b>Вы ввели ', $number, '</b><br>'; var_dump($number); $chars = str_split($number); echo '<br>', '<br>', $chars[0], '<br>'; var_dump($chars[0]); echo '<br>', $chars[1], '<br>'; var_dump($chars[1]); echo '<br>', $chars[2], '<br>'; var_dump($chars[2]); echo '<br>', $chars[3], '<br>'; var_dump($chars[3]); echo '<br>', $chars[4], '<br>'; settype($number, 'int'); echo '<br><b>Теперь то, что было введено выглядит так: ', $number, '</b><br>'; var_dump($number); for ($i=0; $i < sizeof($chars); $i++){ $position = array_search($chars[$i], $chars);//получаем позицию цифры в числе (для возведения в степнь) $result = pow ($chars[$i], $position+1);//возводим цифру в степень echo '<br>', $result, '<br>';//смотрим промежуточный рпезультат var_dump($result); $summ += $result;//суммируем } echo '<br><b>Сумма ', $summ, '</b><br>';//смотрим, что получилось var_dump ($summ); /*Эта часть кода работает некорректно, условие проходит, только с натуральными числами (0-9), с числом 135 результат - INCORRECT NUMBER*/ if($result == $number) echo '<br>TRUE'; else echo '<br>INCORRECT NUMBER'; } ?> </body> </html>
@Maputo , то чувство, когда хочется сквозь землю провалиться) Я два вечера убил на поиск проблемы) Спасибо)
А зачем array_search? $i - и так позиция цифры в числе. А твой алгоритм будет врать, если в числе 2 одинаковых цифры. Потом, если пользователь ввёл не число, ты ему об этом выводишь сообщение, но всё равно пытаешься посчитать степени
Точно, спасибо, мы не ищем легких путей) Можно попросить вас этот момент разжевать поподробнее? Не могу понять, почему так. Спасибо, поправлю.
Ну я не знаю, если такие числа, соответствующие твоему ТЗ, но, к примеру, в числе 252 array_search по твоему алгоритму будет давать только 0, потому что он находит первое вхождение и радуется