Учебные задачи PHP. Задача 5
Primary tabs
Список учебных задач PHP здесь
Условие: Дано некоторое число длиной от 1 до 5 цифр (у нас это число 3567) - вывести его цифры в обратном порядке.
Примечание: Вроде все работает при любых значениях, вот только $num можно сделать максимально 9-тизначным. Если больше, все крашится. Подскажите, почему так происходит?
<?php $num = 3567; // задаем число $arr = str_split($num, 1); // разбиваем на элементы как строку, с шагом 1 и формируем массив $count = count($arr); // считаем количество элементов в массиве $i = 1; while ($i <= $count) { // $count применяем в качестве ограничителя по количеству интераций echo $num % 10, "<br>"; // выводим крайнее число - остаток от деления на 10 $num /= 10; // число для следующей интерации $i++; } ?>
- Log in to post comments
- 9894 reads
math2
Thu, 02/07/2019 - 13:23
Permalink
Для больших чисел имеет место
Для больших чисел имеет место переполнение.
А потом это большое значение float приводится к integer.
При делении по модулю операнды приводятся к integer.
rvsokolov
Fri, 02/08/2019 - 13:40
Permalink
Спасибо за пояснение!
Спасибо за пояснение!
math2
Thu, 02/07/2019 - 13:25
Permalink
<?php
melisa
Fri, 02/08/2019 - 08:48
Permalink
Всё работает корректно, но
Вы создаёте массив только чтобы посчитать количество его элементов, но количество символов можно посчитать и в строке с помощью другой функции. Найдите её.
В данном случае цикл опять же работает корректно, НО. Здесь нецелесообразно использование while, т.к. Вам приходится вручную инициализировать счётчик ($i = 1), и вручную же его увеличивать ($i++). За Вас это с удовольствием сделает цикл for.
Приведите ниже исправленное решение.
Если существуют инструменты, явно предназначенные для решения поставленной задачи, старайтесь их использовать. Если в условии не сказано иное, конечно же.
rvsokolov
Fri, 02/08/2019 - 13:53
Permalink
Поправки
1 и 2. Упрощенный вариант. Действительно, так куда лучше.
В условии задачи как раз было предложено решить с помощью while.
3. Просто мне показалось, что если скрипт не работает с любым числом, значит он неправильный.
4. Правописание в слове «итерация» запомнил:)
melisa
Fri, 02/08/2019 - 13:58
Permalink
В условии задачи как раз было
Не знала, я ориентировалась на условие, которое Вы обозначили в этой заметке. Тогда было всё правильно.
melisa
Fri, 02/08/2019 - 13:58
Permalink
принято
принято