За последние 24 часа нас посетили 22379 программистов и 1058 роботов. Сейчас ищет 661 программист ...

Помощь в сравнении двух int

Тема в разделе "PHP для новичков", создана пользователем filip, 13 окт 2018.

  1. filip

    filip Активный пользователь

    С нами с:
    13 окт 2018
    Сообщения:
    18
    Симпатии:
    0
    Доброго времени суток. Пытаюсь постичь азы PHP путем решения как мне казалось несложных задачек.
    Не получается написать код, который проверяет, равно ли число сумме своих цифр, возведенных в степень, равную позиции в числе o_O (в гугле Disarium Number) (например число 135, 1^1+3^2+5^3 = 135).
    Проблема в строке 49. Проверка проходит корректно только с натуральными числами (0-9), с числом 135, которое соответствует условиям, результат отрицательный. Обьясните новичку, почему так? Самостоятельные поиски в сети ни к чему не привели. Спасибо.
    PHP:
    1. <!DOCTYPE html>
    2. <html>
    3.     <head>
    4.         <title>Disarium numbers</title>
    5.     </head>
    6.     <body>
    7.         <form action="disariumn.php" method="post">
    8.             <p>Введите число<input name="number" type="text"></p>
    9.             <p><input type='submit' value='Проверить'></p>
    10.        </form>
    11. <?php
    12. if($_SERVER['REQUEST_METHOD'] == 'POST') {
    13.     $number=$_POST['number'];
    14.  
    15.     if(is_numeric($number) == FALSE){
    16.         echo 'Bведите число';
    17.     }
    18.    
    19.     echo '<br><b>Вы ввели ', $number, '</b><br>';
    20.     var_dump($number);
    21.  
    22.     $chars = str_split($number);
    23.    
    24.     echo '<br>', '<br>', $chars[0], '<br>';
    25.     var_dump($chars[0]);
    26.     echo '<br>', $chars[1], '<br>';
    27.     var_dump($chars[1]);
    28.     echo '<br>', $chars[2], '<br>';
    29.     var_dump($chars[2]);
    30.     echo '<br>', $chars[3], '<br>';
    31.     var_dump($chars[3]);
    32.     echo '<br>', $chars[4], '<br>';
    33.  
    34.     settype($number, 'int');
    35.     echo '<br><b>Теперь то, что было введено выглядит так: ', $number, '</b><br>';
    36.     var_dump($number);
    37.  
    38.     for ($i=0; $i < sizeof($chars); $i++){
    39.         $position = array_search($chars[$i], $chars);//получаем позицию цифры в числе (для возведения в степнь)
    40.         $result = pow ($chars[$i], $position+1);//возводим цифру в степень
    41.         echo '<br>', $result, '<br>';//смотрим промежуточный рпезультат
    42.         var_dump($result);
    43.         $summ += $result;//суммируем
    44.     }  
    45.     echo '<br><b>Сумма ', $summ, '</b><br>';//смотрим, что получилось
    46.     var_dump ($summ);
    47.    
    48.     /*Эта часть кода работает некорректно, условие проходит, только с натуральными числами (0-9), с числом 135 результат - INCORRECT NUMBER*/
    49.     if($result == $number) echo '<br>TRUE';
    50.     else echo '<br>INCORRECT NUMBER';
    51. }
    52. ?>
    53.     </body>
    54. </html>
     
  2. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    PHP:
    1. if($summ == $number)
     
    filip нравится это.
  3. filip

    filip Активный пользователь

    С нами с:
    13 окт 2018
    Сообщения:
    18
    Симпатии:
    0
    @Maputo , то чувство, когда хочется сквозь землю провалиться) Я два вечера убил на поиск проблемы) Спасибо)
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    А зачем array_search? $i - и так позиция цифры в числе. А твой алгоритм будет врать, если в числе 2 одинаковых цифры.

    Потом, если пользователь ввёл не число, ты ему об этом выводишь сообщение, но всё равно пытаешься посчитать степени
     
    SamyRed, Fell-x27 и filip нравится это.
  5. filip

    filip Активный пользователь

    С нами с:
    13 окт 2018
    Сообщения:
    18
    Симпатии:
    0
    Точно, спасибо, мы не ищем легких путей)
    Можно попросить вас этот момент разжевать поподробнее? Не могу понять, почему так.
    Спасибо, поправлю.
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Ну я не знаю, если такие числа, соответствующие твоему ТЗ, но, к примеру, в числе 252 array_search по твоему алгоритму будет давать только 0, потому что он находит первое вхождение и радуется
     
    filip нравится это.