任意数字“2”次方的表示使用PHP

发布于 2024-11-30 03:31:38 字数 1117 浏览 6 评论 0原文

我尝试玩php,但是我卡在一个地方,在那里我测试了$n=1024的值,然后需要超过60秒,所以php出现超时错误,我不知道如何克服这个问题,如果我唯一的要求是在 20 + ---+ 2n 表单中显示任何输入数字。
尝试下面的代码,n=121,我得到了这个,但我希望在 2n 中也表示 57 形式,所以我尝试了递归,但没有成功。

看看给定的编号如何。以“2”的幂表示:
20 + 21 + 22 + 2 + 24+ 25 + 26+ 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");

?>

I tried to play with php,however I got stuck at one place, where I tested value of $n=1024, then it takes more than 60sec,so timeout error of php arises,I don't know how to overcome this problem,if my only requirement is to present any input number in the 20 + ---+ 2n Form.

trying below code with n=121,I got this,but I wish to represent 57 also in 2n
Form,So I tried recursion,which didn't worked.

see how a given no. be represented in powers of '2':
20 + 21 + 22 +
2 + 24+ 25 + 26+ 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");

?>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

冰雪梦之恋 2024-12-07 03:31:38

不需要递归或类似的东西,只需转换为二进制并循环字符:

$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

No need for recursion or anything like that, just convert to binary and loop through the characters:

$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);

Working example:

http://codepad.org/plzvw2RL

叹倦 2024-12-07 03:31:38

您不能使用 - base_convert() 将字符串转换为二进制,然后根据位的位置格式化输出?

Cant you use - base_convert() to convert the string to binary, then format your output based on the position of bits?

吖咩 2024-12-07 03:31:38

这是一个笑话吧?
哦,不是吗?
好吧,好吧
看看 decbin 函数。不是更容易吗?

It is a joke right?
Oh it isn't?
Well ok
take look at decbin function. Isn't it easier?

追我者格杀勿论 2024-12-07 03:31:38

您可以通过禁用超时来克服超时限制:

set_time_limit(0);

You can overcome the timeout restriction by disabling the timeout:

set_time_limit(0);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文