[模板]高精度

 1 #include<cstdio>
 2 #include<cstring>
 3 int main(){
 4     char a[242],b[242];
 5     int xa[242],xb[242],xc[242];
 6     int la,lb,ls,ll;
 7     scanf("%s%s",a,b);
 8     la=strlen(a);lb=strlen(b);
 9     for(int i=0;i<la;i++)xa[i]=a[la-i-1]-'0';
10     for(int i=0;i<lb;i++)xb[i]=b[lb-i-1]-'0';
11     if(la>lb)ls=lb;else ls=la;ll=la+lb-ls;
12     xc[ll]=0;
13     for(int i=0;i<ls;i++)xc[i]=xa[i]+xb[i];
14     if(ls!=ll)for(int i=ls;i<ll;i++)if(la>lb)xc[i]=xa[i];else xc[i]=xb[i];
15     for(int i=0;i<ll;i++)if(xc[i]>=10){xc[i]-=10;xc[i+1]+=1;}
16     if(xc[ll])printf("1");
17     for(int i=ll-1;i>=0;i--)printf("%d",xc[i]);
18 }
+
 1 #include<cstdio>
 2 #include<cstring>
 3 int main(){
 4     char a[242],b[242],xbc[242];
 5     int xa[242],xb[242],xc[242];
 6     int la,lb,k;
 7     memset(xa,0,sizeof(xa));
 8     memset(xb,0,sizeof(xb));
 9     memset(xc,0,sizeof(xc));
10     scanf("%s%s",a,b);
11     la=strlen(a);
12     lb=strlen(b);
13     if(la<lb||(la==lb&&strcmp(a,b)<0)){
14         printf("-");
15         strcpy(xbc,a);
16         strcpy(a,b);
17         strcpy(b,xbc);
18         k=la;la=lb;lb=k;
19     }
20     if(la==lb&&strcmp(a,b)==0){printf("0");return 0;}
21     for(int i=0;i<la;i++)xa[i]=a[la-i-1]-'0';
22     for(int i=0;i<lb;i++)xb[i]=b[lb-i-1]-'0';
23     for(int i=0;i<lb;i++)xc[i]=xa[i]-xb[i];
24     for(int i=lb;i<la;i++)xc[i]=xa[i];
25     for(int i=0;i<la;i++)if(xc[i]<0){
26             xc[i]+=10;
27             xc[i+1]--;
28         }
29     int first=1;
30     for(int i=la-1;i>=0;i--){
31         if(xc[i]==0&&first==1)continue;
32         printf("%d",xc[i]);
33         first++;
34     }
35 }
-
 1 #include<cstdio>
 2 #include<cstring>
 3 int main(){
 4     char a[1002],b[1002];
 5     int xa[1002],xb[1002],xc[2004];
 6     int la,lb,first=0,ll;
 7     scanf("%s%s",a,b);
 8     la=strlen(a);lb=strlen(b);
 9     ll=la+lb;
10     for(int i=0;i<ll;i++)xc[i]=0;
11     for(int i=0;i<la;i++)xa[i]=a[la-i-1]-'0';
12     for(int i=0;i<lb;i++)xb[i]=b[lb-i-1]-'0';
13     for(int i=0;i<la;i++)for(int j=0;j<lb;j++)xc[i+j]+=xa[i]*xb[j];
14     for(int i=0;i<ll;i++){xc[i+1]+=xc[i]/10;xc[i]%=10;}
15     for(int i=ll-1;i>=0;i--){
16         if(first==0&&xc[i]==0)continue;
17         printf("%d",xc[i]);
18         first++;
19     }
20 }
×
 1 #include<cstdio>
 2 #include<cstring>
 3 int a[205],b[205],c[205];
 4 bool ty(int a[],int b[],int x,int lena,int lenb){
 5     bool flag=true;
 6     for(int i=0;i<lenb;i++)a[lenb+x-i-1]-=b[lenb-1-i];
 7     for(int i=lenb-1;i>=0;i--)if(a[lenb+x-i-1]<0){a[lenb+x-i-1]+=10;a[lenb+x-i]--;if(a[lenb+x]<0){flag=false;break;}}
 8     for(int i=0;i<lenb;i++)a[lenb+x-i-1]+=b[lenb-1-i];
 9     for(int i=lenb-1;i>=0;i--)if(a[lenb+x-i-1]>=10){a[lenb+x-i-1]-=10;a[lenb+x-i]++;}
10     return flag;
11 }
12 void minus(int a[],int b[],int x,int lenb){
13     for(int i=0;i<lenb;i++)a[lenb+x-i-1]-=b[lenb-i-1];
14     for(int i=lenb-1;i>=0;i--)if(a[lenb+x-i-1]<0){a[lenb+x-i-1]+=10;a[lenb+x-i]--;}
15 }
16 int main(){
17     char a1[205],b1[205];
18     int n,lena,lenb,com=0,first=0;
19     scanf("%s%s",a1,b1);
20     lena=strlen(a1);lenb=strlen(b1);
21     for(int i=0;i<lena;i++)a[lena-i-1]=a1[i]-'0';
22     for(int i=0;i<lenb;i++)b[lenb-i-1]=b1[i]-'0';
23     if(lena>=lenb)for(int x=lena-lenb;x>=0;x--)while(ty(a,b,x,lena,lenb)){minus(a,b,x,lenb);c[x]++;}
24     for(int i=202;i>=0;i--){
25         if(c[i])first++;
26         if(first)printf("%d",c[i]);
27     }
28     if(first==0)printf("0");
29 }
/

 

posted @ 2019-07-07 06:55  DeepinC  阅读(68)  评论(0编辑  收藏  举报