这一周给新生说了说大整数~突然想起这道题了~
2^3.1M 次方的后500位.快速阶乘+大整数乘法.不过好在是大数乘小数.
源代码:
#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 125
void Operate(int *a,int *b)
{
int c[N];
int i,j,sum,Temp;
memset(c,0,sizeof(c));
for(i=0;i<N;i++)
for(j=0,sum=0;j<N-i;j++)
{
Temp=c[i+j]+a[i]*b[j]+sum;
c[i+j]=Temp%10000;
sum=Temp/10000;
}
memcpy(a,c,sizeof(c));
}
int main()
{
int n,i;
int iPow[N],iResult[N];
while(scanf("%d",&n)!=EOF||n)
{
printf("%d\n",(int)(n*log10(2))+1);
memset(iPow,0,sizeof(iPow));
memset(iResult,0,sizeof(iResult));
iPow[0]=2;
iResult[0]=1;
while(n)
{
if(n&1)
Operate(iResult,iPow);
n>>=1;
Operate(iPow,iPow);
}
iResult[0]-=1;
for(i=N-1;i>=0;i--)
{
if(i%25==12)
printf("%02d\n%02d",iResult[i]/100,iResult[i]%100);
else
{
printf("%04d",iResult[i]);
if(0==i%25)
printf("\n");
}
}
}
return 0;
}