Другой метод (без зацикливания, что делает его быстрее для большого количества будучи модом небольшим числом)
<?php
$a= 17;
$b = 3;
$c = ($a/$b - (int)($a/$b)) * $b;
echo $c; // => 2
?>
Сравнение скорости:
Looping time (17 % 3): 0.0000209808349609375
no-Loop time (17 % 3): 0.0000140666961669921875
Looping time (177777777 % 3): 3.370441913604736328125
no-Loop time (177777777 % 3): 0.00000286102294921875
код испытания (fiddle):
<pre>
<?php
$a= 17;
$b = 3;
$starttime = microtime(true);
while ($b <= $a) {
$c = $a - $b;
$a -= $b;
}
$endtime = microtime(true);
echo rtrim(sprintf('Looping time (17 %% 3): %.50F', $endtime - $starttime), "0");
echo "<br />";
$a= 17;
$b = 3;
$starttime = microtime(true);
$c = ($a/$b - (int)($a/$b)) * $b;
$endtime = microtime(true);
echo rtrim(sprintf('no-Loop time (17 %% 3): %.50F', $endtime - $starttime), "0");
echo "<br /><br />";
$a= 177777777;
$b = 3;
$starttime = microtime(true);
while ($b <= $a) {
$c = $a - $b;
$a -= $b;
}
$endtime = microtime(true);
echo rtrim(sprintf('Looping time (177777777 %% 3): %.50F', $endtime - $starttime), "0");
echo "<br />";
$a= 177777777;
$b = 3;
$starttime = microtime(true);
$c = ($a/$b - (int)($a/$b)) * $b;
$endtime = microtime(true);
echo rtrim(sprintf('no-Loop time (177777777 %% 3): %.50F', $endtime - $starttime), "0");
?>
</pre>
Что вы подразумеваете под «без операторов»? Предположительно, вы просто хотите 'echo 2;' –
@Mike W -> Это мой вопрос для интервью. Я пробовал как Php $ c = $ a/$ b; $ res = $ c * $ b; $ output = $ a - $ res; // 2 ?> Но интервьюер ожидает, что я получу выход без какого-либо оператора. он просто проверяет мои логические навыки. Я не смог пройти –
Что там, чтобы понизить? –