<?php
$num=0;
for ($i=1;$i<=64;$i++)
{
static $p=1;
$num+=$p;
$p=$p*2;
echo '第'.$i.'个箱子:'.$p;
echo "<br />";
}
echo '总共:'.$num;
?>
$num=0;
for ($i=1;$i<=64;$i++)
{
static $p=1;
$num+=$p;
$p=$p*2;
echo '第'.$i.'个箱子:'.$p;
echo "<br />";
}
echo '总共:'.$num;
?>
$num=1;
for($i=1;$i<64;$i++)
{
$num+=$num*2;
}
echo "最后一个箱子的小麦数: ".$num;
?>
第2个箱子:4
第3个箱子:8
第4个箱子:16
第5个箱子:32
第6个箱子:64
第7个箱子:128
第8个箱子:256
第9个箱子:512
第10个箱子:1024
第11个箱子:2048
第12个箱子:4096
第13个箱子:8192
第14个箱子:16384
第15个箱子:32768
第16个箱子:65536
第17个箱子:131072
第18个箱子:262144
第19个箱子:524288
第20个箱子:1048576
第21个箱子:2097152
第22个箱子:4194304
第23个箱子:8388608
第24个箱子:16777216
第25个箱子:33554432
第26个箱子:67108864
第27个箱子:134217728
第28个箱子:268435456
第29个箱子:536870912
第30个箱子:1073741824
第31个箱子:2147483648
第32个箱子:4294967296
第33个箱子:8589934592
第34个箱子:17179869184
第35个箱子:34359738368
第36个箱子:68719476736
第37个箱子:137438953472
第38个箱子:274877906944
第39个箱子:549755813888
第40个箱子:1.09951162778E+012
第41个箱子:2.19902325555E+012
第42个箱子:4.3980465111E+012
第43个箱子:8.79609302221E+012
第44个箱子:1.75921860444E+013
第45个箱子:3.51843720888E+013
第46个箱子:7.03687441777E+013
第47个箱子:1.40737488355E+014
第48个箱子:2.81474976711E+014
第49个箱子:5.62949953421E+014
第50个箱子:1.12589990684E+015
第51个箱子:2.25179981369E+015
第52个箱子:4.50359962737E+015
第53个箱子:9.00719925474E+015
第54个箱子:1.80143985095E+016
第55个箱子:3.6028797019E+016
第56个箱子:7.20575940379E+016
第57个箱子:1.44115188076E+017
第58个箱子:2.88230376152E+017
第59个箱子:5.76460752303E+017
第60个箱子:1.15292150461E+018
第61个箱子:2.30584300921E+018
第62个箱子:4.61168601843E+018
第63个箱子:9.22337203685E+018
第64个箱子:1.84467440737E+019
总共:1.84467440737E+019
最后一个箱子的小麦数: 1.14456127343E+030
上面的是二楼的算法,下面的是三楼的算法,,好像对不上哦,呵。。
<?php
var_dump(pow(2,64));
?>
<script language="JavaScript">
document.write(Math.pow(2,63));
</script>
第1箱: pow(2,0) = 1
第2箱: pow(2,1) = 2
第3箱: pow(2,2) = 4
第4箱: pow(2,3) = 8
第5箱: pow(2,4) = 14
.............
应该是pow(2,63)吧
var_dump(pow(2,63));
?>------------------------
Content-type: text/htmlX-Powered-By: PHP/4.3.6
float(9.2233720368548E+18)
#include<string.h>char a[256]={'1'};
int b=64;
void main()
{
int i,j;
int iadd=0,len,sum=0;
clrscr();
for(i=1;i<=b;i++)
{
iadd=0;
for(j=0;j<strlen(a);j++)
{
sum=(a[j]-48)*2+iadd;
iadd=sum/10;
a[j]=sum%10+48;
}
if(iadd)
a[j]=iadd+48;
}
printf("result %d is:",i-1);
len=strlen(a)-1;
while(len>=0)
printf("%c",a[len--]);
printf("\n");
getchar();
}
<?$a=array('1');;
$b=64;$iadd=0;
$sum=0;
for($i=1;$i<=$b;$i++)
{
$iadd=0;
for($j=0;$j < strlen($a);$j++)
{
$sum=($a[$j]-48)*2+$iadd;
$iadd=$sum/10;
$a[$j]=$sum%10+48;
}
if($iadd)
$a[$j]=$iadd+48;
}
echo "result ".$i." is:";
$len=strlen($a)-1;
while($len>=0)
echo $a[$len--];
echo "<p>";?>
$p=$p*2;
echo '第'.$i.'个箱子:'.$p
这两行应该换过来~~
<?
$num=1;
for($i=1;$i<64;$i++)
{
$num+=$num*2;
}
echo "最后一个箱子的小麦数: ".$num;
?>===================这种算法错误~~
题目要求每个箱子是前一个箱子的两倍,而不是前面所有箱子里的小麦数的总和的两倍
<?php
var_dump(pow(2,63));
?>
而不是Ugain的
<?php
var_dump(pow(2,64));
?>
<?
$num=1;
for($i=0;$i < 63;$i++)
{
$num*=2;
}
echo "最后一个箱子的小麦数: ".$num;
?>
9.22337203685E+018但后面有若干位被忽略掉了,所以要将每个数字都存到数组中,每次循环时,将该数组中的数*2才可以。*2的时候,还要考虑进位的问题。
结果
bcpow("2","63")=9223372036854775808 前提,是你的PHP安装了BCMATH高精度函式库了。。
使用高精度函数库的原因是php最多只能维持16为有效数根据题题意“用程序表述”,是不可以使用指数函数的
$m = 1;
for($i=1;$i<64;$i++) {
$m = bcmul($m,2);
}
echo $m;
n = 0
for i in range(65):
n += 2**i
print n
python里的缩进能用空格吗
$m = 1;
for($i=1;$i<64;$i++) {
$m = bcmul($m,2);
}
echo $m;唠叨老大,不同意你的说法:
如下
echo 'bcpow("2","63")='.bcpow("2","63");
这也是一段程序
只是我们使用的算法不一样而已,呵呵,,
#include "stdlib.h"
void main()
{
int i=1;
printf("第一个箱子有1个");
for(i=1;i<=64;i++)
{
printf("第二个箱子有%d",2*i);
}
}
for($i=1;$i<64;$i++)
{
$num=$num*2;
}
这是程序表述
不过对于结果可能不是很精确、
不过应该这样算法。