C++高精度加减法模板
注意点:
1.字符串存入到数组中,别忘了-‘0’。
2.注意进位,借位。
3.输出若不为0时,第一个0不输出。
在这里插入代码片
#include<iostream>
#include<algorithm>
#include<string>
#include<cmath>
using namespace std;
typedef long long ll;
const int N=110;
string q,w;
int a[N],b[N],c[N],d[N],e[N],tmp[N];
void sub(int a[],int b[],int n)
{
int t=0;
for(int i=0;i<=n;i++)
{
d[i]=a[i]-b[i]-t;
t=0;
if(d[i]<0)
{
t=1;
}
d[i]=(d[i]+10)%10;
}
int i=n;
while(i>=1)
{
if(d[i]==0 &&d[i-1]!=0)
{
i--;
break;
}
i--;
}
while(i>=0) cout<<d[i--];
cout<<endl;
}
void sub_compare(int a[],int b[])
{
if(q.length()>w.length())
{
sub(a,b,q.length());
}
else if(q.length()==w.length())
{
if(a[q.length()-1]>=b[w.length()-1])
{
sub(a,b,q.length());
}
else
{
cout<<'-';
sub(b,a,w.length());
}
}
else if(q.length()<w.length())
{
cout<<"-";
sub(b,a,w.length());
}
}
void add(int a[],int b[],int n)
{
int t=0;
for(int i=0;i<=n;i++)
{
c[i]=a[i]+b[i]+t;
t=0;
if(c[i]>=10)
{
t=1;
}
c[i]=c[i]%10;
}
int i=n;
while(c[i]==0) i--;
while(i>=0) cout<<c[i--];
cout<<endl;
}
int main()
{
cin>>q>>w;
for(int i=0;i<q.length();i++)
{
a[i]=q[q.length()-1-i]-'0';
}
for(int i=0;i<w.length();i++)
{
b[i]=w[w.length()-1-i]-'0';
}
add(a,b,max(q.length(),w.length()));
sub_compare(a,b);
}