@GRO24

Как округлить число в меньшую сторону кратное числу?

Уверен что мое решение не самое изящное.
Есть количество участвующих: допустим, 187.
Есть количество победителей: например, 5.

Мне нужно округлить количество участвующих так, чтобы на выходе при делении этого числа постоянно 2 я получил число 5 в итоге
В данном примере получается число 160; (160/2=80/2=40/2=20/2=10/2=5) - надеюсь тут не запутал.

Я решил это с помощью цикла:
$input = 187;
$output = 5;
while (true) {
	if($output > $input):
		$output = $output/2;
		break;
	endif;
	$output = 2*$output;

}
	echo $output;

А как бы сделали вы?
  • Вопрос задан
  • 268 просмотров
Решения вопроса 1
Adamos
@Adamos
Деление пополам могло навести на более компьютерные мысли.
Алгоритм нахождения такого числа для N участников при количестве победителей X:
Нацело поделить N на X, оставить в результате только старший значащий бит, умножить это на X.
187 / 5 = 37 = 100101b
100000b * 5 = 160
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Talgat_Sat
Легче сделать математически ,
<?php
$input = 187;
$output = 5;
$buf=log ( intdiv($input, $output ),2 );
echo(round ( $buf, 0 ,  PHP_ROUND_HALF_UP ) );

логарифм числа x -это такое число,что при возведения основания этого логарифма в логарифм ты получаешь x. т.е вместо цикла можно просто взять логарифм .
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы