Пример решения. 5. Вывести цифры числа в обратном порядке
Primary tabs
Задача из этого списка
<?php /*Дано некоторое число длиной от 1 до 5 цифр - вывести его цифры в обратном порядке*/ function numbers ($a) { echo $a, " = <br>"; $c = 1; do { $c *=10; if ($a%$c < $c/10) { echo 0, "<br>"; } else { echo ($a%$c - $a%($c/10)) / ($c/10), "<br>"; } } while ($a/$c >= 1); } numbers(88053);
- Log in to post comments
- 23036 reads
vedro-compota
Fri, 04/21/2017 - 15:56
Permalink
просьба прокомментировать
просьба прокомментировать ключевые действия в коде.
Например, каков смысл действия
может быть эта проверка вообще лишняя ? Проверьте ещё раз.
_____________
матфак вгу и остальная классика =)
melisa
Fri, 04/21/2017 - 16:26
Permalink
атавизм, остался от первоначального варианта решения
проблема вывода "0" в случае отсутствия остатка от деления числа на 10/100/1000/10000 решена далее в коде
vedro-compota
Fri, 04/21/2017 - 15:59
Permalink
Альтернативное решение
Давайте решим другим способов, в php число это одновременно и строка, а строку можно перегнать в массив. Напишите пожалуйста альтернативное (и куда более быстрое для записи) решение с использованием перебора элементов полученного массива. Может, пригодиться и это :)
_____________
матфак вгу и остальная классика =)
melisa
Fri, 04/21/2017 - 17:18
Permalink
да, с массивом проще
vedro-compota
Fri, 04/21/2017 - 17:24
Permalink
foreach вместо while
для обхода массива следует использовать цикл foreach() (всегда когда возможно).
_____________
матфак вгу и остальная классика =)
melisa
Fri, 04/21/2017 - 17:52
Permalink
ещё попытка
math2
Fri, 04/21/2017 - 22:30
Permalink
Нормально работает. Можно
Нормально работает. Можно сразу $value выводить
math2
Fri, 04/21/2017 - 16:26
Permalink
Можно немного сократить эту
Можно немного сократить эту программу
melisa
Fri, 04/21/2017 - 16:48
Permalink
спасибо, исправлено
Здесь
math2
Fri, 04/21/2017 - 17:07
Permalink
Кстати, можно переписать эту
Кстати, можно переписать эту программу, используя рекурсию:
vedro-compota
Fri, 04/21/2017 - 17:43
Permalink
Или без рекурсии и проще
_____________
матфак вгу и остальная классика =)
math2
Fri, 04/21/2017 - 22:58
Permalink
Обратил внимание, что fibMe(1
Обратил внимание, что fibMe(1) ничего не выводит. Также не будет выведена единица числа 1000.
Но функция fibMe выводит все цифры числа 10006567.
Добавил строчку в скрипт, чтобы посмотреть на $a.
Вывод этого скрипта таков:
Дробная часть не отсекается, и поэтому последняя итерация цикла будет выполнена
по условию $1\lt 1.0006567 $.
Чтобы сделать вычисление целочисленным, можно добавить приведение к int и изменить
условие цикла на $\$a>0$.
Теперь вывод будет таким:
math2
Fri, 04/21/2017 - 23:16
Permalink
В скрипте, указанном
В скрипте, указанном здесь
http://fkn.ktu10.com/?q=comment/1659#comment-1659
выражение $\$a/10$ может давать нецелый результат.
Здесь это проблема.
Этот скрипт добавит ноль в вывод в качестве последней цифры для
числа 9998732:
Можно использовать приведение типов, или целочисленное деление intdiv, чтобы исправить эту ситуацию, и чтобы вычисление также было в целых числах:
Вывод скрипта:
melisa
Sun, 04/23/2017 - 14:53
Permalink
спасибо за дополнение!
В процессе решения, для одного из вариантов, мне сильно не хватало ф-ции intdiv. Надо было спрашивать!
math2
Fri, 04/21/2017 - 23:53
Permalink
Отмечу также, что "первый"
Отмечу также, что "первый" скрипт хорош и свободен от этих проблем.
Здесь также присутствуют нецелочисленное деление и дробные результаты:
Но это не отражается на его работе.