高精度 A*B Problem

題目:請戳此處

#include<stdio.h>
#include<stdlib.h> 
#include<string.h>
char s[30000],l[30000];
long long a[30001],b[30001],c[60000],al,bl,cl,i,j,x;
int main()
{gets(s);
 al=strlen(s);
 for (i=0;i<(5-al%5)%5;i++){
   strcpy(l,s);
   strcpy(s,"0");
   strcat(s,l);
 }
 if (al%5!=0) al=(al/5+1)*5;
 for (i=0;i<al/5;i++)
   a[i+1]=(s[al-i*5-1]-'0')+(s[al-i*5-2]-'0')*10+(s[al-i*5-3]-'0')*100+(s[al-i*5-4]-'0')*1000+(s[al-i*5-5]-'0')*10000;
 gets(s);
 bl=strlen(s);
 for (i=0;i<(5-bl%5)%5;i++){
   strcpy(l,s);
   strcpy(s,"0");
   strcat(s,l);
 }
 if (bl%5!=0) bl=(bl/5+1)*5;
 for (i=0;i<bl/5;i++)
   b[i+1]=(s[bl-i*5-1]-'0')+(s[bl-i*5-2]-'0')*10+(s[bl-i*5-3]-'0')*100+(s[bl-i*5-4]-'0')*1000+(s[bl-i*5-5]-'0')*10000;
 for (i=1;i<=bl/5;i++) 
   for (j=1;j<=al/5;j++)
     c[i+j-1]=c[i+j-1]+a[j]*b[i];
 for (i=1;i<=al/5+bl/5;i++){
   c[i+1]=c[i+1]+c[i]/100000;
   c[i]=c[i]%100000;  
 }
 x=0;
 for (i=al/5+bl/5;i>0;i--){
   if (c[i]!=0 && x==0){
     x=1; cl=i;
   }
   if (x){    
     if(i<cl){
       if (c[i]<10) printf("0");
       if (c[i]<100) printf("0");
       if (c[i]<1000) printf("0");
       if (c[i]<10000) printf("0");
     }
     printf("%d",c[i]);
   }
 }
 if (x==0) printf("0");
 puts("");
 return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章