我试着玩php,但是我被困在一个地方,在那里我测试了$n=1024的值,然后它需要超过60秒,所以php的超时错误出现,我不知道如何克服这个问题,如果我唯一的要求是在20 + -+ 2n形式中呈现任何输入数字。尝试下面的代码n=121,我得到了这个,但我希望在2n中也表示57的形式,所以我尝试递归,这不起作用。
查看给定的no。用'2'的幂表示:
20 + 21 + 22 +2 + 2 <一口> 4> 5> 6> /blockquote>代码:
一口><?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"); ?>
不需要递归或类似的东西,只需转换为二进制并遍历字符:
$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
您可以使用- base_convert()将字符串转换为二进制,然后根据位的位置格式化输出吗?
这是个笑话,对吗?哦,不是吗?好吧看看decbin函数。不是更容易吗?
您可以通过禁用timeout来克服超时限制:
set_time_limit(0);