Видать dotZero почувствовал, что я уже устал переворачивать строки, поэтому подкинул сегодня задачу, которую я до этого не решал. Днем разбираться с ней было некогда, а вечером, решил все-таки уделить ей внимание и разобраться как это работает.
Задача простая. Перевернуть любое целое число используя только математические операторы. Было 5432, должно стать 2345.
function reverseInt( $a )
{
$tmp = $a;
$return = 0;
while( $tmp > 0 )
{
/*
Играть с числами очень весело, можно находить и открывать для себя
их волшебные свойства. Так, например, если 432 разделить на 10,
то мы получим 43.2
Выделяя остаток от деления, нам очень легко решить нашу
задачу по перестановке числа.
Таким образом, проходим по каждому разряду числа,
умножая его после каждой итерации на 10
и прибавляя к результату остаток от деления,
получаем нужное нам число.
*/
$return = ( $return * 10 ) + ( $tmp % 10 );
/*
Каждый раз делим исходное число на 10, что-бы обойти каждый его разряд.
*/
$tmp = intval( $tmp / 10 );
}
return $return ;
}
$foo = 123456789;
echo 'Start: ' . $foo . "\n";
$bar = reverseInt( $foo );
echo 'End: ' . $bar . "\n";
Как видно, все достаточно просто, нужно просто понять как это работает. Теперь хочу найти все варианты с решением этой задачи, думаю что если сделать это с помощью битовых операций получится еще быстрее и красивее.