High-precision Addition:
#include <iostream>using namespacestd;Const intmaxn=500005;//initializing an arraystringz,v;inta[maxn]={0},b[maxn]={0},ans[maxn]={0};voidWorkplus () {cin>>z>>v; Long intx=z.length (); Long inty=v.length (); for(inti=x-1; i>=0; i--) a[i]=z[x-1-i]-'0'; for(inti=y-1; i>=0; i--) b[i]=v[y-1-i]-'0'; intw=0; W=x>y?x:y; for(intI=0; i<w;i++) {ans[i+1]= (A[i]+b[i]+ans[i])/Ten; Ans[i]= (A[i]+b[i]+ans[i])%Ten; } BOOLt=false; for(inti=maxn-1; i>=0; i--) { if(ans[i]!=0|| t==true) {cout<<Ans[i]; T=true; } } if(t==false) cout<<0; return;}intMain () {workplus (); return 0; }
High Precision Subtraction:
#include <iostream>#include<cstring>#include<algorithm>#include<cmath>#include<cstdlib>using namespacestd;Const intmaxn=100001;intL1,l2;intA[MAXN],B[MAXN];strings1,s2;voidSwapstring&a,string&b) { stringBT; T=A; A=b; b=t;}BOOLJudgestringAstringb) { if(A.size () <b.size ())return true; if(A.size () >b.size ())return false; for(intI=0; I<a.size (); + +i) {if(A[i]>b[i])return false; if(A[i]<b[i])return true; } return false;}voidWork () {cin>>s1>>S2; if(judge (S1,S2)) {swap (S1,S2); cout<<'-'; } L1=s1.size (); L2=s2.size (); for(intI=0; i<=l1;i++) a[l1-i]=s1[i]-'0'; for(intI=0; i<=l2;i++) b[l2-i]=s2[i]-'0';//? for(intI=1; i<=l1;++i) {A[i]-=B[i]; if(a[i]<0) {A[i+1]--; A[i]+=Ten; } } while(a[l1]==0&&l1>1) l1--; for(inti=l1;i>=1;--i) cout<<A[i]; return;}intMain () {work (); return 0;}
High-precision algorithms