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("
");
       }
       else {
            for(i=lenb-1;i>=0;i--)
            printf("%d",b[i]);
        printf("
");
       }

    }
    return 0;
}
原文地址:https://www.cnblogs.com/llei1573/p/3396316.html