#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;
}
高精度减法与高精度加法类似,但要对答案为负数时进行特判
本文介绍了C++中实现高精度加法和减法的基本算法,这两种算法在高精度计算中至关重要。同时提到,高精度减法需要特别处理答案可能为负数的情况。
&spm=1001.2101.3001.5002&articleId=131353092&d=1&t=3&u=3dc5aed510b54577a0ece9a47d4b71a1)
1887

被折叠的 条评论
为什么被折叠?



