您的位置:首页 > 其它

高精度 A*B Problem

2016-02-04 15:07 162 查看
题目:请戳此处

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: