是出在进位方面,这种算法不是很容易的理解。
可以这样理解:2^0+2^1+…2^63=2^64-1=(2^32-1)(2^32+1)=4 294 967 295 *4 294 967 297
#include
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;
}