Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Задачка на минуту
 
 автор: Artem S.   (06.05.2007 в 15:59)   письмо автору
 
 

Просто на разминку.
Перевести число 123456 в число 654321 (в число на оборот) без использования преобразования типов в один цикл.

   
 
 автор: Unkind   (06.05.2007 в 18:57)   письмо автору
 
   для: Artem S.   (06.05.2007 в 15:59)
 

<?php
for($i 0$string "123456"$l strlen($string);
$i $l 2;
list(
$string[$i], $string[$l - ($i 1)]) =
 array(
$string[$l - ($i 1)], $string[$i]), $i++);
?>

   
 
 автор: kasmanaft   (06.05.2007 в 20:47)   письмо автору
 
   для: Unkind   (06.05.2007 в 18:57)
 

По условию 123456 - не строка, а число...
Однако без преобразования типов в одном цикле посчитать порядок числа,
да еще и "перевернуть" его я не умудрился. str_repeat в каком-то смысле тоже цикл... ну да ладно.
вот что надумал:

<?php
$num 
123456;
$len 6;
for (
$i 1$i <= $len$i++)
{
     
$d = (int)'1'.str_repeat('0'$len $i);
     
$d2 = (int)'1'.str_repeat('0'$i-1);
     if (
$i == 1)
          
$result += floor($num $d) * $d2;
     else 
$result += (floor($num $d) % 10) * $d2;
}
echo 
$result;
?>

   
 
 автор: Artem S.   (06.05.2007 в 21:23)   письмо автору
 
   для: kasmanaft   (06.05.2007 в 20:47)
 

Смотрите в сторону % оператора

   
 
 автор: kasmanaft   (06.05.2007 в 21:36)   письмо автору
 
   для: Artem S.   (06.05.2007 в 21:23)
 

Угу, туда и смотрел ... Что ж, будем подумать.

   
 
 автор: Trianon   (07.05.2007 в 00:33)   письмо автору
 
   для: Artem S.   (06.05.2007 в 15:59)
 


for($x = 12345, $y = 0; 
     $x;
      $d = $x %10,    $x = ($x - $d)/10,    $y = $y*10+$d)
 ;


intval(str_reverse($x)) быстрее будет. :)

   
 
 автор: Artem S.   (07.05.2007 в 05:07)   письмо автору
 
   для: Trianon   (07.05.2007 в 00:33)
 

:)

   
 
 автор: EXP   (17.05.2007 в 13:01)   письмо автору
 
   для: Artem S.   (07.05.2007 в 05:07)
 

<?php
$num 
'123456';
$num2 '';
for(
$i strlen($num); $i >= 0$i--)
{
$num2 .= $num[$i];
 }
echo 
$num2;// если 123456 в '' , это преобразование типов ? 

   
 
 автор: Trianon   (17.05.2007 в 13:09)   письмо автору
 
   для: EXP   (17.05.2007 в 13:01)
 

См. жирный шрифт в условии.
Если 123456 в '' , то это уже не число.

   
 
 автор: EXP   (17.05.2007 в 15:05)   письмо автору
 
   для: Trianon   (17.05.2007 в 13:09)
 

<?php
$num 
123456;
for(
$i 10$n 1$i $num 10$i *= 10$n *= 10)
{
$numer .= floor(($num $i) / $n);
}
ещё такой вариант с .=

   
 
 автор: Trianon   (17.05.2007 в 17:34)   письмо автору
 
   для: EXP   (17.05.2007 в 15:05)
 

вызовите var_dump($number)
в результате формируется строка, а не число.

   
 
 автор: EXP   (17.05.2007 в 18:04)   письмо автору
 
   для: Trianon   (17.05.2007 в 17:34)
 

Что.то похожее на это , оптимальнее наверное что.то должно быть
<?php
$num 
123456;
$n 1;
while((
$num $n *= 10) > 0.1)
{
 
$n2 = ($n 10);
 
$numer = ($numer 10) + floor(($num $n) / $n2);
}
var_dump($numer);

   
 
 автор: Trianon   (17.05.2007 в 18:17)   письмо автору
 
   для: EXP   (17.05.2007 в 18:04)
 

вы явно не понимаете, чего хотел Артем.
Вам просто не приходилось программировать в условиях, когда плавающей точки нет, стандартных функций нет, и даже операций умножения и деления и тех нет. Процессором не реализованы. А работать с данными надо. В том числе и числовыми. Ну да ладно....

   
 
 автор: sim5   (25.05.2007 в 04:19)   письмо автору
 
   для: Trianon   (07.05.2007 в 00:33)
 

Иногда меня зацикливает:) Ну это я понимаю:

intval(strrev($x))

но откуда str_reverse? или это для наглядности ?))

P.S. это не мой глюк, бывает, что вставляется коммент не туда куда я хочу. Это я к Trianon естественно хотел обратиться.

   
 
 автор: Trianon   (25.05.2007 в 09:37)   письмо автору
 
   для: sim5   (25.05.2007 в 04:19)
 

да, конечно.
мысль на бумагу вылезла, не пройдя фэйс-контроль. )

   
 
 автор: Киналь   (17.05.2007 в 21:21)   письмо автору
 
   для: Artem S.   (06.05.2007 в 15:59)
 


<.?php
$num_1 = 123456;
$num_2 = 777777 - $num_1;
?>


Шутка=)

   
 
 автор: debug   (28.05.2007 в 23:19)   письмо автору
 
   для: Киналь   (17.05.2007 в 21:21)
 

$A=array(1,2,3,4,5,6,7,8,9);
$R=array("");

for($i=0; $i<count($A);$i++)
{
echo "$A[$i]";
}

echo "<br>";

for($i=0; $i<count($A);$i++)
{
$T=array_pop($A);
array_unshift($A, "_");
$R[$i]=$T;
echo "$R[$i]";
}
о как

   
 
 автор: kasmanaft   (29.05.2007 в 06:46)   письмо автору
 
   для: debug   (28.05.2007 в 23:19)
 

Ну вообще-то массивы использовать нельзя было...
А Ваш второй цикл мне напомнил цитату с баша :)

<gram|work> про индийский код
<gram|work> Какой самый извращенный способ проверить в условии if () булевскую переменную ?
<gram|work> bool b;
<gram|work> b = false;
<gram|work> if (b == true){...}
<gram|work> Это децкий лепет
<gram|work> ИТАК, ПЕРВОЕ МЕСТО
<gram|work> Знакомый говорит что нашел только что в коде:
<gram|work> if (b.ToString().length < 5){...}


<?
$A
=array(1,2,3,4,5,6,7,8,9);
echo 
implode(''$A), "<br>";
echo 
implode(''array_reverse($A));
/*
for($i=count($A); $i>=0; $i--)
  echo $A[$i]
*/
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования