Учебные задачи 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
- 11393 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
<?php $num = 356799999999977777777777777777777777777777777666666666666666666666666; // задаем число echo $num. "<br>"; echo "int ". intval($num). "<br>"; $arr = str_split($num, 1); // разбиваем на элементы как строку, с шагом 1 и формируем массив $count = count($arr); // считаем количество элементов в массиве $i = 1; while ($i <= $count) { // $count применяем в качестве ограничителя по количеству интераций echo $num % 10, "<br>"; // выводим крайнее число - остаток от деления на 10 $num /= 10; // число для следующей интерации $i++; } ?>melisa
Fri, 02/08/2019 - 08:48
Permalink
Всё работает корректно, но
Вы создаёте массив только чтобы посчитать количество его элементов, но количество символов можно посчитать и в строке с помощью другой функции. Найдите её.
$i = 1; while ($i <= $count) { // $count применяем в качестве ограничителя по количеству интераций echo $num % 10, "<br>"; // выводим крайнее число - остаток от деления на 10 $num /= 10; // число для следующей интерации $i++; }В данном случае цикл опять же работает корректно, НО. Здесь нецелесообразно использование while, т.к. Вам приходится вручную инициализировать счётчик ($i = 1), и вручную же его увеличивать ($i++). За Вас это с удовольствием сделает цикл for.
Приведите ниже исправленное решение.
Если существуют инструменты, явно предназначенные для решения поставленной задачи, старайтесь их использовать. Если в условии не сказано иное, конечно же.
rvsokolov
Fri, 02/08/2019 - 13:53
Permalink
Поправки
1 и 2. Упрощенный вариант. Действительно, так куда лучше.
<?php $num = 3567; $count = strlen($num); for ($i = 1; $i <= $count; $i++) { echo $num % 10, "<br>"; $num /= 10; } ?>В условии задачи как раз было предложено решить с помощью while.
3. Просто мне показалось, что если скрипт не работает с любым числом, значит он неправильный.
4. Правописание в слове «итерация» запомнил:)
melisa
Fri, 02/08/2019 - 13:58
Permalink
В условии задачи как раз было
Не знала, я ориентировалась на условие, которое Вы обозначили в этой заметке. Тогда было всё правильно.
melisa
Fri, 02/08/2019 - 13:58
Permalink
принято
принято