PDA

Просмотр полной версии : Как заменить деление сложением или вычитанием?


zip1990
30.11.2008, 12:30
Как заменить деление сложением или вычитанием? Помниться был там простенький алгоритм. Помогиме вспомнить

DIAgen
30.11.2008, 12:39
Если правильно тебя понял

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

zip1990
30.11.2008, 12:44
а если не исмпользовать умножение?

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

scrat
30.11.2008, 13:05
<?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);
?>


Правда верно только для целочисленного деления

Solker
30.11.2008, 16:26
Будущии ядерные физики России собрались.
<?php

echo del(100,2);

function del($delimoe,$delitel)
{
while($delimoe != 0)
{
$delimoe -= $delitel;
$chastnoe++;
}
return $chastnoe;
}

?>

inlanger
30.11.2008, 17:06
Чтобы заменить деление на другие операции надо перевести всё в двоичную систему. Деление в двоичной системе сводится к другим простым операциям.

Qwazar
30.11.2008, 17:19
Чтобы заменить деление на другие операции надо перевести всё в двоичную систему. Деление в двоичной системе сводится к другим простым операциям. Покажи деление, к примеру, на 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);

))))

Неплохой буфероверфлоу такой у вас получился:)

PHPoozy
30.11.2008, 17:30
<?php

echo del(100,2);

function del($delimoe,$delitel)
{
while($delimoe >= 0)
{
$delimoe -= $delitel;
$chastnoe++;
}
return $chastnoe;
}

?

Pashkela
30.11.2008, 17:32
и чем этот код лучше моего?:)

Qwazar
30.11.2008, 17:35
и чем этот код лучше моего?:) Тем что твой не работает и сваливается в бесконечный цикл, если делится с остатком. :)

Pashkela
30.11.2008, 17:44
мой? Вы уверены?

astrologer
30.11.2008, 17:47
Как заменить деление сложением или вычитанием? Помниться был там простенький алгоритм. Помогиме вспомнить Зачем?

Qwazar
30.11.2008, 17:48
мой? Вы уверены? Ой, прошу прощения, ошибся ником.

zip1990
30.11.2008, 18:20
да так надо

Solker
30.11.2008, 20:24
Вообщем, переделал, прекрасно делит 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 . Как сами и сказали.

rcc0023
02.12.2008, 01:12
А для чего это применяется?

Pashkela
02.12.2008, 01:23
http://www.npk.ru/articles/article.html?id=23_7

почитай, познавательно