请教个小程序。。。。。。

http://wenwen.soso.com/z/q284958050.htm?ch=gr.new.grdt让百度气糊涂了。。。这个是求象棋上的麦子数。。。第一个棋格里放... http://wenwen.soso.com/z/q284958050.htm?ch=gr.new.grdt
让百度气糊涂了。。。
这个是求象棋上的麦子数。。。
第一个棋格里放一粒麦子第二个放2粒。。。。三个放4粒。。。依次类推
展开
 我来答
随心E谈
2011-05-05 · TA获得超过1009个赞
知道小有建树答主
回答量:491
采纳率:50%
帮助的人:140万
展开全部
是出在进位方面,这种算法不是很容易的理解。
可以这样理解:2^0+2^1+…2^63=2^64-1=(2^32-1)(2^32+1)=4 294 967 295 *4 294 967 297
#include<stdio.h>
int main()
{
int i,j,count,a[10]={5,9,2,7,6,9,4,9,2,4},b[10]={7,9,2,7,6,9,4,9,2,4},sum[25]={0};
for(i=0;i<10;i++)
for(j=0;j<10;j++)
sum[i+j]+=a[i]*b[j];/*模拟小学乘法运算,只是后面才进位*/

for(i=1;i<25;i++)
{
sum[i]=sum[i]+sum[i-1]/10;/*进行进位运算*/
sum[i-1]%=10;
}
for(i=24;i>0;i--)
if(sum[i])
break;/*输出时略去前面的0*/

for(;i>=0;i--)
{
printf("%d",sum[i]);
}
printf("\n%.0lf检验的数\n",(double)4294967295*(double)4294967297);/*用来检测该数前面的数字情况*/

getchar();
return 0;
}
更多追问追答
追问
这一句是什么意思?
for(i=24;i>0;i--)
if(sum[i])
break;/*输出时略去前面的0*/
怎么就把前面的零去了?
追答
比如一个数为十进制数是0000124578,就该省略了前面的0;
下面是改进的算法。
注意不能使用2进制向另一变量进,只能使用10进制向另一变量进

要使二进制与十进制联系上,,可以用下面的方法;

一个变量满足10^8放就行另一变量进;比如num1==123456789,那么num2+=num1/2;(注意是+=)
下面是算2的64次幂的:

#include
int main()
{
int i,j,a[25]={0},n=100000000;/*满足100000000就向另一变量进*/
unsigned long num[3]={1,0,0};
for(i=1;i=n)
{
num[1]+=(num[0]/n);
num[0]%=n;
}

if(num[1]>=n)
{
num[2]+=(num[1]/n);
num[1]%=n;
}
}

for(i=0;i=0;i--)
printf("%d",a[i]);

getchar();

return 0;
}

适当修改,还能计算更大的数呢!就是多几个num[i];
中间还可以改为循环.l利用这两种思想就可以进行大的数的运算了。试试看?!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式