Я пытаюсь разбить число на массив чисел (в php), например, так:
- 25 становится (16, 8, 1)
- 8 становится (8)
- 11 становится (8, 2, 1)
Я не знаю, какой правильный термин, но я думаю, что идея ясна.
Мое решение с циклом довольно простое:
$number = rand(0, 128);
$number_array_loop = array();
$temp_number = $number;
while ($temp_number > 0) {
$found_number = pow(2, floor(log($temp_number, 2)));
$temp_number -= $found_number;
$number_array_loop[] = $found_number;
}
У меня также есть рекурсивное решение, но я не могу заставить его работать без использования глобальной переменной (не хочу этого), следующее приближается, но приводит к массивам в массивах:
function get_numbers($rest_number) {
$found_number = pow(2, floor(log($rest_number, 2)));
if ($found_number > 0) {
$temp_array[] = get_numbers($rest_number - $found_number);
$temp_array[] = $found_number;
}
return $temp_array;
}
$number_array_recursive = array();
$number_array_recursive = get_numbers($number);
Однако использование чего-то вроде pow(floor(log())) кажется слишком сложным для такой простой задачи.
Мне кажется, что проблема требует рекурсивного решения с очень простой математикой, но я просто не вижу этого.
Любая помощь будет оценена.
Редактировать: Двоичный код — это ключ, всем большое спасибо!