представление любого числа в степени '2' с использованием PHP - PullRequest
0 голосов
/ 15 августа 2011

Я пытался поиграть с php, однако я застрял в одном месте, где я тестировал значение $ n = 1024, затем это занимает более 60 секунд, поэтому возникает ошибка тайм-аута php, я не знаю, как ее преодолеть эта проблема, если мое единственное требование состоит в том, чтобы представить любой входной номер в форме 2 0 + --- + 2 n .
пробуя приведенный ниже код с n = 121, я получил это, но я хочу представить 57 также в 2 n Форма, поэтому я попробовал рекурсию, которая не сработала.

посмотри как дано нет. быть представленным в степени «2»:
2 0 + 2 1 + 2 2 + 2 + 2 4 + 2 5 + 2 6 + 57

КОД:

<?php

echo("see how a given no. be represented in powers of '2' :<br/>\n");

$n=121;
$two_pow=array(
    pow(2,0),pow(2,1),pow(2,2),pow(2,3),pow(2,4),pow(2,5),
    pow(2,6),pow(2,7),pow(2,8),pow(2,9),pow(2,10)
);
//print_r($two_pow);


$i=0;

while($n>=$two_pow[$i])
    $i++;

/* displaying  2^3*/
if($i>0)
    $ij=$i-1;

/* diplaying difference of give N and 2^i*/
$diff=$n-$two_pow[$ij];

if($n>0)
{
    for($i=0;$i<=$ij;$i++)
    {
        echo("2<sup> $i </sup>"."+ \n");

        if($i==$ij && $diff>0)
        {
            echo("\n". $diff);
        }
    }
}
else 
    echo("<br/>not possible for values less then zero");

?>

Ответы [ 4 ]

2 голосов
/ 15 августа 2011

Не можете ли вы использовать - base_convert () , чтобы преобразовать строку в двоичную, а затем отформатировать вывод в соответствии с положением бит?

1 голос
/ 15 августа 2011

Нет необходимости в рекурсии или чем-то в этом роде, просто преобразуйте в двоичный файл и переберите символы:

$bits = array_reverse(str_split(decbin($n)));
$output = array();
foreach($bits as $key => $bit) {
    if($bit == 1) {
        $output[] = '2<sup>'.($key).'</sup>';
    }
}
echo implode(' + ', $output);

Рабочий пример:

http://codepad.org/plzvw2RL

0 голосов
/ 15 августа 2011

Это шутка, верно?О, это не так?Ну ладно, взгляните на функция decbin .Не проще ли?

0 голосов
/ 15 августа 2011

Вы можете преодолеть ограничение тайм-аута, отключив тайм-аут :

set_time_limit(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...