UVA Exponentiation
开始wa了几次后来重写一次就A了不知坑在哪
#include<stdio.h>
#include<string.h>
#define N 1000
int a[N],b[N],sum[N];
int lena,lenb,len,flag,c;
char s[N];
void init()
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
int i,j,k;
flag=0;
b[0]=1;lenb=1;
len=strlen(s);
for(i=len-1,j=0;i>=0;i--)
if(s[i]=='.') {flag=1;k=i;}
else a[j++]=s[i]-'0';
if(flag) {c=len-k-1;lena=len-1;len=c;}
else {c=0;lena=len;len=0;}
}
void mult()
{
int i,j;
memset(sum,0,sizeof(sum));
for(i=0;i<lena;i++)
for(j=0;j<lenb;j++)
sum[i+j]+=a[i]*b[j];
for(i=0;i<lena+lenb+5;i++)
if(sum[i]>=10) {sum[i+1]+=sum[i]/10;sum[i]%=10;}
for(i=lena+lenb+5;i>len;i--)
if(sum[i]!=0) {lenb=i+1;break;}
if(i==len) {lenb=i+1;}
for(i=0;i<lenb;i++)
b[i]=sum[i];
len+=c;
}
int main()
{
int n,i,j;
while(scanf("%s %d",s,&n)!=EOF)
{
init();
for(i=0;i<n;i++)
mult();
len-=c;
if(b[lenb-1]==0) lenb--;
for(i=0;i<lenb;i++)
if(b[i]!=0) {j=i;break;}
if(flag){
for(i=lenb-1;i>=j;i--)
if(i==len-1) printf(".%d",b[i]);
else printf("%d",b[i]);
printf("\n");
}
else {
for(i=lenb-1;i>=0;i--)
printf("%d",b[i]);
printf("\n");
}
}
return 0;
}

浙公网安备 33010602011771号