#include<iostream>
#include<algorithm>
using namespace std;
string a,b;
int A[510],B[510],C[510];
void add(int alen,int blen)
{
for(int i=0;i<max(alen,blen);i++)
{
C[i]=C[i]+A[i]+B[i];
if(C[i]>9)
{
C[i+1]=C[i+1]+C[i]/10;
C[i]=C[i]%10;
}
}
if(C[max(alen,blen)]!=0) cout<<C[max(alen,blen)];
for(int i=max(alen,blen)-1;i>=0;i--) cout<<C[i];
}
int main()
{
cin>>a>>b;
int alen=a.size(),blen=b.size();
for(int i=0;i<alen;i++) A[i]=a[alen-i-1]-'0';
for(int j=0;j<blen;j++) B[j]=b[blen-j-1]-'0';
add(alen,blen);
return 0;
}
高精度加法,是高精度算法中的基本算法,用途广泛
#include<iostream>
#include<algorithm>
using namespace std;
string a,b;
int A[10100],B[10100],C[10100];
bool st;
bool compare(int alen,int blen)
{
if(alen<blen) return 0;
if(alen>blen) return 1;
for(int i=alen-1;i>=0;i--)
{
if(a[i]>b[i]) return 1;
if(a[i]<b[i]) return 0;
}
return 1;
}
void sub(int alen,int blen)
{
for(int i=0;i<max(alen,blen);i++)
{
C[i]=A[i]-B[i];
if(C[i]<0)
{
C[i]=C[i]+10;
A[i+1]=A[i+1]-1;
}
}
if(st==1) cout<<"-";
bool is_first=0;
for(int i=max(alen,blen)-1;i>=0;i--)
{
if(C[i]==0&&is_first==0)
{
continue;
}
is_first=1;
cout<<C[i];
}
if(is_first==0) cout<<'0';
}
int main()
{
cin>>a>>b;
int alen=a.size(),blen=b.size();
if(compare(alen,blen)==1)
{
for(int i=0;i<alen;i++) A[i]=a[alen-i-1]-'0';
for(int i=0;i<blen;i++) B[i]=b[blen-i-1]-'0';
}
else
{
for(int i=0;i<alen;i++) B[i]=a[alen-i-1]-'0';
for(int i=0;i<blen;i++) A[i]=b[blen-i-1]-'0';
swap(alen,blen);
st=1;
}
sub(alen,blen);
return 0;
}
高精度减法与高精度加法类似,但要对答案为负数时进行特判