Просмотр полной версии : Как заменить деление сложением или вычитанием?
Как заменить деление сложением или вычитанием? Помниться был там простенький алгоритм. Помогиме вспомнить
Если правильно тебя понял
eval('echo 14+14;');
echo '<br>';
eval('echo 14-5 ;');
echo '<br>';
eval('echo 14/5 ;');
echo '<br>';
eval('echo 14*5 ;');
Pashkela
30.11.2008, 12:40
http://forum.sources.ru/index.php?act=ST&f=43&t=102840
а если не исмпользовать умножение?
Pashkela
30.11.2008, 12:58
http://php.ru/manual/function.gmp-div-q.html
<?php
$div1 = gmp_div_q("100", "5");
echo gmp_strval($div1) . "\n";
$div2 = gmp_div_q("1", "3");
echo gmp_strval($div2) . "\n";
$div3 = gmp_div_q("1", "3", GMP_ROUND_PLUSINF);
echo gmp_strval($div3) . "\n";
$div4 = gmp_div_q("-1", "4", GMP_ROUND_PLUSINF);
echo gmp_strval($div4) . "\n";
$div5 = gmp_div_q("-1", "4", GMP_ROUND_MINUSINF);
echo gmp_strval($div5) . "\n";
?>
Выведет:
20
0
1
0
1
<?php
function mult($a,$b)
{
for($i=0;$i<$b;$i++) $res+=$a;
return $res;
}
?>
Pashkela
30.11.2008, 13:10
echo mult(100,20);
2000:)
<?
function mult($a,$b)
{
for($i=1;$i<=$a;$i++)
{
$c=$c+$b;
$buff=$a-$c;
if ($buff<=0) {echo $i; break;}
}
}
mult(100,4);
?>
Правда верно только для целочисленного деления
Будущии ядерные физики России собрались.
<?php
echo del(100,2);
function del($delimoe,$delitel)
{
while($delimoe != 0)
{
$delimoe -= $delitel;
$chastnoe++;
}
return $chastnoe;
}
?>
inlanger
30.11.2008, 17:06
Чтобы заменить деление на другие операции надо перевести всё в двоичную систему. Деление в двоичной системе сводится к другим простым операциям.
Чтобы заменить деление на другие операции надо перевести всё в двоичную систему. Деление в двоичной системе сводится к другим простым операциям. Покажи деление, к примеру, на 5 плз в простых операциях в двоичной системе.
Pashkela
30.11.2008, 17:21
Будущии ядерные физики России собрались.
<?php
echo del(100,2);
function del($delimoe,$delitel)
{
while($delimoe != 0)
{
$delimoe -= $delitel;
$chastnoe++;
}
return $chastnoe;
}
?>
гы, ув. Эйнштейн, а сделайте на вашем примере
echo del(100,3);
))))
Неплохой буфероверфлоу такой у вас получился:)
<?php
echo del(100,2);
function del($delimoe,$delitel)
{
while($delimoe >= 0)
{
$delimoe -= $delitel;
$chastnoe++;
}
return $chastnoe;
}
?
Pashkela
30.11.2008, 17:32
и чем этот код лучше моего?:)
и чем этот код лучше моего?:) Тем что твой не работает и сваливается в бесконечный цикл, если делится с остатком. :)
Pashkela
30.11.2008, 17:44
мой? Вы уверены?
astrologer
30.11.2008, 17:47
Как заменить деление сложением или вычитанием? Помниться был там простенький алгоритм. Помогиме вспомнить Зачем?
мой? Вы уверены? Ой, прошу прощения, ошибся ником.
Вообщем, переделал, прекрасно делит int на Int без остатка.
Это стандартный алгоритм по замене деления - вычитанием.
<?php
echo del(100,2); //50
echo del(100,3); //33
function del($delimoe,$delitel)
{
while($delimoe >= $delitel)
{
$chastnoe++;
$delimoe -= $delitel;
}
return $chastnoe;
}
?>
Делимое и частное, должны быть int. Соответственно и результат будет int без остатка. Над алгоритмом с остатком - не задумывался.
Pashkela, ув. идите на http://php.ru/manual/function.gmp-div-q.html . Как сами и сказали.
А для чего это применяется?
Pashkela
02.12.2008, 01:23
http://www.npk.ru/articles/article.html?id=23_7
почитай, познавательно
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot