циклы php

B
На сайте с 14.04.2012
Offline
35
716

можете посоветовать литературу,как например,я видел книги посвященные регуляркам,но только по циклам?или блоги чьи-то где более подробно расписывается

php.net,php.su курил. но как на деле сталкиваюсь-зависаю

for($i = 0, $ds = 0; $i < strlen($number); $i++) $ds += $number[$i];

$n = 1234; 

$s = 0;

while ($n > 0) {
$r = $n % 10;
$s += $r;
$n = (int)$n/10;
}

echo $s;

2 скрипта считают суммы цифр числа. Ни один не могу понять алгоритм. Разжуйте по-русски что в данном случаее делают циклы

DP
На сайте с 24.04.2012
Offline
16
#1
bimbo:
можете посоветовать литературу,как например,я видел книги посвященные регуляркам,но только по циклам?или блоги чьи-то где более подробно расписывается


php.net,php.su курил. но как на деле сталкиваюсь-зависаю
for($i = 0, $ds = 0; $i < strlen($number); $i++) $ds += $number[$i];


$n = 1234; 

$s = 0;

while ($n > 0) {
$r = $n % 10;
$s += $r;
$n = (int)$n/10;
}

echo $s;


2 скрипта считают суммы цифр числа. Ни один не могу понять алгоритм. Разжуйте по-русски что в данном случаее делают циклы

Первый просто относится к $number как к стрингу, проходит по каждому элементу и прибавляет его к сумме.

Второй работает как нужно работать в нормальных языках высокого уровня, где у переменных есть типы. Число%10 возвращает остаток от деления на 10, то есть последнюю цифру. Число/10, округленное до интеджера дает целый результат деления на десять. Цикл все время берет последнюю цифру и прибавляет ее к сумме, а от первоначального числа отрезает последнюю цифру. И так пока есть что отрезать.

dlyanachalas
На сайте с 15.09.2006
Offline
693
#2

Первый скрипт у вас неправильно отобразился. Да и он явно криво написан, могут быть проблемы совместимости. Как минимум, так надо (intval):

for($i = 0, $ds = 0; $i < strlen($number); $i++)

{
$ds += intval($number|$i|);
}

в $ds будет сумма цифр. Идем по числу так, как будто это строка.

Второй скрипт поразрядно берет отстаток от деления на 10:

$r = $n % 10;  

Суммирует этот остаток:

$s += $r;  

И делит число на 10, отбрасывая остаток, тем самым переходя к следующему разряду:

$n = (int)$n/10;  
B
На сайте с 14.04.2012
Offline
35
#3

Спасибо большое

Y
На сайте с 22.01.2008
Offline
137
#4

bimbo, будьте внимательны, т.к.:


$n = 2;
echo $n = (int)2/10; // Вернет 0.2 (в таком случае, $n всегда(!) будет больше 0, а значит и цикл будет бесконечным) -- 2 приравнивается к int, а не $n!

echo (int)$n; // вернет 0, т.к. берется int от $n

http://ideone.com/Vet4Z

---------- Добавлено 07.05.2012 в 19:12 ----------

в данном случае лучше использовать intval(), имхо

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий