算法复习——高精度集合
加法:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include<ctime> #include<cctype> #include<algorithm> using namespace std; const int N=205; char s[N],t[N]; int len,n,m,a[N],b[N],c[N]; int main() { scanf("%s",s+1); int n=strlen(s+1); for(int i=1;i<=n;i++) a[n-i+1]=s[i]-'0'; scanf("%s",t+1); int m=strlen(t+1); for(int i=1;i<=m;i++) b[m-i+1]=t[i]-'0'; len=max(n,m); int x=0; for(int i=1;i<=len;i++) { x=a[i]+b[i]+x; c[i]=x%10; x=x/10; } if(x) c[++len]=x; for(int i=len;i>=1;i--) cout<<c[i]; return 0; }
减法:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<ctime> #include<cctype> #include<cstring> #include<string> #include<algorithm> using namespace std; const int N=205; char s[N],t[N]; int a[N],b[N],c[N],n,m,len; int main() { scanf("%s",s+1); n=strlen(s+1); for(int i=1;i<=n;i++) a[n-i+1]=s[i]-'0'; scanf("%s",t+1); m=strlen(t+1); for(int i=1;i<=m;i++) b[m-i+1]=t[i]-'0'; if(n<m||(n==m)&&strcmp(s+1,t+1)<0) { cout<<"-"; for(int i=1;i<=m;i++) swap(a[i],b[i]); swap(n,m); } int x; for(int i=1;i<=n;i++) { x=10+a[i]-b[i]; c[++len]=x%10; a[i+1]=a[i+1]+x/10-1; } while(!c[len]&&len>1) len--; for(int i=len;i>=1;i--) cout<<c[i]; return 0; }
乘法
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<ctime> #include<cctype> #include<cstring> #include<string> #include<algorithm> using namespace std; const int N=205; char s[N],t[N]; int a[N],b[N],c[100000],n,m,len; int main() { scanf("%s",s+1); n=strlen(s+1); for(int i=1;i<=n;i++) a[n-i+1]=s[i]-'0'; scanf("%s",t+1); m=strlen(t+1); for(int i=1;i<=m;i++) b[m-i+1]=t[i]-'0'; for(int i=1;i<=n;i++) { int x=0; for(int j=1;j<=m;j++) { x=a[i]*b[j]+x+c[i+j-1]; c[i+j-1]=x%10; x=x/10; } c[i+m]+=x; } int len=n+m; while(!c[len]&&len>1) len--; for(int i=len;i>=1;i--) cout<<c[i]; return 0; }
除法(大数除以int范围的数)
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<ctime> #include<cctype> #include<cstring> #include<string> #include<algorithm> using namespace std; const int N=205; char s[N]; int a[N],n,b,c[N],len=1; int main() { scanf("%s",s+1); n=strlen(s+1); for(int i=1;i<=n;i++) a[i]=s[i]-'0'; scanf("%d",&b); int x=0; for(int i=1;i<=n;i++) { c[i]=(x*10+a[i])/b; x=(x*10+a[i])%b; } while(!c[len]&&len<n) len++; for(int i=len;i<=n;i++) cout<<c[i]; cout<<endl; cout<<x<<endl; return 0; }