与高精度加法同理,只是需要处理一下长短问题而已
/*
* @Author: Gehrychiang
* @Date: 2020-02-01 10:32:54
* @Website: www.yilantingfeng.site
* @E-mail: gehrychiang@aliyun.com
*/
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000001;
char a[MAXN];
char b[MAXN];
char c[MAXN];
bool cmp(char a[], char b[])//自定义比较函数
{
if (strlen(a) != strlen(b))
{
return strlen(a) > strlen(b);
}
else
{
if (strcmp(a, b) >= 0)
return true;
else
return false;
}
}
int main()
{
cin >> a >> b;
int flag = 0;
if (cmp(a, b))
{
flag = 1; //正
}
else
{
swap(a, b);
flag = -1;
}
int p = 0;
int len_a = strlen(a);
int len_b = strlen(b);
int tmp = 0; //当前位
int nex = 0; //下位借
c[p] = '0';
while (a[0] != '0' || b[0] != '0' || nex != 0) //a或b的最高位不为0即继续
{
c[p] = '0';
tmp -= nex;
nex = 0;
tmp += a[max(len_a - 1 - p, 0)] - '0' - b[max(len_b - 1 - p, 0)] + '0';
a[max(len_a - 1 - p, 0)] = '0';
b[max(len_b - 1 - p, 0)] = '0';
if (tmp < 0)
{
tmp += 10;
nex += 1;
}
c[p] += tmp;
tmp = 0;
++p;
}
int len_c = strlen(c);
int lala = 0;//用来记录是否输出了第一个非0的数
if(flag==-1)
{
cout<<"-";
}
for (int i = len_c - 1; i >= 0; i--)
{
if (c[i] != '0')
{
cout << c[i];
lala = 1;
}
if (c[i] == '0' && lala)
{
cout << c[i];
}
}
if(lala==0)
{
cout<<"0"<<endl;
}
return 0;
}

