High precision addition (large bit addition)

1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 char a1[100],b1[100]; 6 int a[100],b[100],c[100]; 7 int Lena,lenb,lenc,x, I; 8 memset(a,0,sizeof(a)); Memset (b,0,sizeof(b)); Memset (c,0,sizeof(c)); //gets(a1); 12 //gets(b1); 13 //getchar(); 14 while(scanf("%s%s",&a1,&b1)! =EOF) 15 { 16 lena=strlen(a1); 17 lenb=strlen(b1); 18 for(i=0; i<=lena; i++) 19 a[lena-i]=a1[i]-'0'; //a[I]=a1[lena-i-1]-48; //a[I]=a1[lena-i-1]-48; 21 for(i=0; i<=lenb; i++) 22 b[lenb-i]=b1[i]-'0'; //b[I]=b1[lenb-i-1]-48; 24 lenc=1; //lenc = 25 x=0; / / x is carry 26 while (lenc < = Lena | | lenc < = lenb) 27 {28 c [lenc] = [lenc] a [lenc] + b + x; X =c[lenc]/10; [lenc]%=10; // store lenc bit 31 lenc++; } 33 c[lenc]=x; 34 if(c[lenc]==0) 35 lenc--; For (I =lenc; i>=1; i--) 37 cout<<c[i]; 38 cout<<endl; 39 } 40 return 0; 41}Copy the code

High precision subtraction (large subtraction)

1 #include <bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 char n[256],n1[256],n2[256]; 6 int a[256],b[256],c[256]; 7 int lena,lenb,lenc,i; 8 memset(a,0,sizeof(a)); 9 memset(b,0,sizeof(b)); 10 memset(c,0,sizeof(c)); 11 while(scanf("%s%s",&n1,&n2)! = (EOF) / / minuend n1, n2 for reduction {12 13 the if (strlen (n1) < strlen (n2) | | (strlen (n1) = = strlen (n2) && STRCMP (n1, and n2) < 0)) / / STRCMP () as string comparison function, When n1==n2, return 0; If n1>n2, the value is a positive integer. If n1<n2, return the negative integer 14 {15 strcpy(n,n1); Strcpy (n1,n2); strcpy(n1,n2); 17 strcpy(n2,n); Cout <<"-"; cout<<"-"; 19} 20 Lena =strlen(n1); 21 lenb=strlen(n2); 22 for(i=0; i<=lena; i++) 23 a[lena-i]=(int)(n1[i]-'0'); For (I =0; i<=lenb; i++) 25 b[lenb-i]=(int)(n2[i]-'0'); I =1; 27 while(i<=lena||i<=lenb) 28 { 29 if(a[i]<b[i]) 30 { 31 a[i]+=10; A [I +1]--; 33 } 34 c[i]=a[i]-b[i]; // the corresponding bit subtracts 35 i++; 36 } 37 lenc=i; 38 while((c[lenc]==0)&&(lenc>1)) 39 lenc--; For (I =lenc; i>=1; i--) 41 cout<<c[i]; 42 cout<<endl; 43 } 44 return 0; 45}Copy the code