高精度加法
#include<iostream> #include<cstring> #include<cstdio> using namespace std; char a[200],b[200]; int a1[200],b1[200],c1[200]; int l1,l2,l3; int main() { scanf("%s",a); scanf("%s",b); l1=strlen(a); l2=strlen(b); for(int i=0;i<=strlen(a)-1;i++) a1[l1-i]=a[i]-48; for(int i=0;i<=strlen(b)-1;i++) b1[l2-i]=b[i]-48; int k=0; l3=1; while(l3<=l1||l3<=l2) { c1[l3]=a1[l3]+b1[l3]+k; k=c1[l3]/10; c1[l3]%=10; l3++; } c1[l3]=k; if(c1[l3]==0) l3--; for(int i=l3;i>=1;i--) cout<<c1[i]; }
高精度减法(只支持两个正整数)
#include<iostream> #include<cstring> #include<cstdio> using namespace std; char a[200],b[200],n[200]; int a1[200],b1[200],c1[200]; int l1,l2,l3; int main() { scanf("%s",a); scanf("%s",b); if(strlen(a)<strlen(b)||(strlen(a)==strlen(b)&&strcmp(a,b)<0)) { strcpy(n,a); strcpy(a,b); strcpy(b,n); cout<<"-"; } l1=strlen(a); l2=strlen(b); for(int i=0;i<=strlen(a)-1;i++) a1[l1-i]=a[i]-48; for(int i=0;i<=strlen(b)-1;i++) b1[l2-i]=b[i]-48; l3=1; while(l3<=l1||l3<=l2) { if(a1[l3]<b1[l3]) { a1[l3]+=10; a1[l3+1]--; } c1[l3]=a1[l3]-b1[l3]; l3++; } while((c1[l3]==0)&&l3>1) l3--; for(int i=l3;i>=1;i--) cout<<c1[i]; }
高精度乘法
#include<iostream> #include<cstring> #include<cstdio> using namespace std; char a[2002],b[2002]; int a1[2002],b1[2002],c1[4040]; int l1,l2,l3; int k; int main() { scanf("%s",a); scanf("%s",b); l1=strlen(a); l2=strlen(b); for(int i=0;i<=l1-1;i++) a1[l1-i]=a[i]-48; for(int i=0;i<=l2-1;i++) b1[l2-i]=b[i]-48; for(int i=1;i<=l1;i++) { k=0; for(int j=1;j<=l2;j++) { c1[i+j-1]=c1[i+j-1]+k+a1[i]*b1[j]; k=c1[i+j-1]/10; c1[i+j-1]%=10; } c1[l2+i]=k; } l3=l1+l2; while(l3>1&&c1[l3]==0) l3--; for(int i=l3;i>=1;i--) cout<<c1[i]; }
高精度除法(高精除以高精)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int a[200],b[200],c[200],tem[200]; void intt (int a[]) { string s; cin>>s; a[0]=s.length(); for(int i=1;i<=a[0];i++) a[i]=s[a[0]-i]-48; } void print(int a[]) { if(a[0]==0) { cout<<0<<endl; return; } for(int i=a[0];i>=1;i--) cout<<a[i]; cout<<endl; } int compare(int a[],int b[]) { if(a[0]>b[0]) return 1; if(a[0]<b[0]) return -1; for(int i=a[0];i>=1;i--) { if(a[i]>b[i]) return 1; if(a[i]<b[i]) return -1; } return 0; } int charu(int b[],int tem[],int k) { for(int i=1;i<=b[0];i++) tem[i+k-1]=b[i]; tem[0]=b[0]+k-1; } void jian(int a[],int b[]) { int flag; flag=compare(a,b); if(flag==0) { a[0]=0; return; } if(flag==1) { for(int i=1;i<=a[0];i++) { if(a[i]<b[i]) { a[i]+=10; a[i+1]-=1; } a[i]=a[i]-b[i]; } while(a[0]>0&&a[a[0]]==0) a[0]--; } } void chufa(int a[],int b[],int c[]) { c[0]=a[0]-b[0]+1; for(int i=c[0];i>=1;i--) { memset(tem,0,sizeof(tem)); charu(b,tem,i); while(compare(a,tem)>=0) { c[i]++; jian(a,tem); } } while(c[0]>0&&c[c[0]]==0) c[0]--; } int main() { intt(a); intt(b); chufa(a,b,c); print(a); print(c); }
高精度除法(高精除以低精)
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int a1[20001],b1[20001]; char a[20001]; int l1,l2,x=0,b; int main() { scanf("%s",a); l1=strlen(a); cin>>b; for(int i=0;i<=l1-1;i++) a1[i+1]=a[i]-48; l2=1; for(int i=1;i<=l1;i++) { b1[i]=(10*x+a1[i])/b; x=(x*10+a1[i])%b; } while(b1[l2]==0&&l2<l1) l2++; for(int i=l2;i<=l1;i++) cout<<b1[i]; }
原文:https://www.cnblogs.com/BrokenString/p/9279542.html