我试着玩php,但是我被困在一个地方,我测试了$ n = 1024的值,然后需要超过60秒,所以php的超时错误出现了,我不知道如何克服这个问题,如果我唯一要求是在2 0 + --- + 2 n 表格中提供任何输入数字。
尝试下面的代码n = 121,我得到了这个,但我希望代表57也在2 n
Form,所以我尝试了递归,但是没有用。
看看给定的没有。表示为'2'的幂:2 0 + 2 1 + 2 2 + 2 + 2 4 + 2 5 + 2 6 + 57
CODE:
<?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");
?>
答案 0 :(得分:2)
不能使用 - base_convert()将字符串转换为二进制,然后根据位的位置格式化输出?
答案 1 :(得分:1)
不需要递归或类似的东西,只需转换为二进制并循环遍历字符:
$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);
工作示例:
答案 2 :(得分:0)
答案 3 :(得分:-2)
您可以通过disabling the timeout克服超时限制:
set_time_limit(0);