高精度 A*B Problem

来源:互联网 发布:淘宝onlyanna真名晓颖 编辑:程序博客网 时间:2024/05/17 01:28

题目:请戳此处

#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;}


2 0
原创粉丝点击