高精度加法
#include <iostream>
#include <cstring>
using namespace std;
const int N=1e8+10;
int A[N],B[N],C[N];
int la,lb,lc;
void sum(int A[],int B[],int C[]){
for(int i=0;i<lc;i++){
C[i]+=A[i]+B[i];
C[i+1]+=C[i]/10;
C[i]%=10;
}
if(C[lc]) lc++;
}
int main(){
string a,b;
cin>>a>>b;
la=a.size(),lb=b.size(),lc=max(la,lb);
for(int i=la-1;i>=0;i--) A[la-1-i]=a[i]-'0';
for(int i=lb-1;i>=0;i--) B[lb-1-i]=b[i]-'0';
sum(A,B,C);
for(int i=lc-1;~i;i--) cout<<C[i];
return 0;
}
高精度减法
#include <iostream>
#include <cstring>
using namespace std;
const int N=1e8+10;
int A[N],B[N],C[N];
int la,lb,lc;
bool cmp(int A[],int B[]){
if(la!=lb) return la>lb;
for(int i=la-1;~i;i--)
if(A[i]!=B[i]) return A[i]>B[i];
return true;//避免结果为负0(如果两个数完全相等,不会返回false);
}
void sub(int A[],int B[],int C[]){
for(int i=0;i<lc;i++){
if(A[i]<B[i])
A[i+1]--,A[i]+=10;
C[i]=A[i]-B[i];
}
while(lc&&C[lc]==0) lc--;
}
int main(){
string a,b;
cin>>a>>b;
la=a.size(),lb=b.size(),lc=max(la,lb);
for(int i=la-1;i>=0;i--) A[la-1-i]=a[i]-'0';
for(int i=lb-1;i>=0;i--) B[lb-1-i]=b[i]-'0';
if(!cmp(A,B)) swap(A,B),cout<<"-";
sub(A,B,C);
for(int i=lc;~i;i--) cout<<C[i];
return 0;
}
高精度乘法
#include <iostream>
#include <cstring>
using namespace std;
const int N=1e8+10;
int A[N],B[N],C[N];
int la,lb,lc;
void mul(int A[],int B[],int C[]){
for(int i=0;i<la;i++)
for(int j=0;j<lb;j++){
C[i+j]+=A[i]*B[j];
C[i+j+1]+=C[i+j]/10;
C[i+j]%=10;
}
while(lc&&C[lc]==0) lc--;//去除前导零,当一个数是零的时候只要保存一个零即可;
}
int main(){
string a,b;
cin>>a>>b;
la=a.size(),lb=b.size(),lc=la+lb;
for(int i=la-1;~i;i--) A[la-1-i]=a[i]-'0';
for(int i=lb-1;~i;i--) B[lb-1-i]=b[i]-'0';
mul(A,B,C);
for(int i=lc;~i;i--) cout<<C[i];
return 0;
}
高精度除法
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1e8+10;
int A[N],b,C[N];
int la,lb,lc;
void div(int A[],int b,int C[]){
long long r=0;
for(int i=la-1;~i;i--){
r=r*10+A[i];
C[la-1-i]=r/b;
r%=b;
}
reverse(C,C+lc);
while(lc&&C[lc]==0) lc--;
}
int main(){
string a;
cin>>a>>b;
lc=la=a.size();
for(int i=la-1;~i;i--) A[la-1-i]=a[i]-'0';
div(A,b,C);
for(int i=lc;~i;i--) cout<<C[i];
return 0;
}