高精度减法,求a-b。a,b都是不超过240位的非负整数。
输入
两个非负整数,每行一个。
输出
一个整数,代表两个整数相减之后的结果。
样例
输入
33333333333333333333333333333333333333333 22222222222222222222222222222222222222222
输出
11111111111111111111111
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char const *argv[])
{
string s1, s2;
int a[250], b[250], c[250];
int len1, len2;
memset(a, 0, sizeof(a) / sizeof(int));
memset(b, 0, sizeof(b) / sizeof(int));
memset(c, 0, sizeof(c) / sizeof(int));
// getline(cin, s1);
// getline(cin, s2);
cin >> s1 >> s2;
if (s1 == s2)
{
cout << "0";
return 0;
}
len1 = s1.size();
len2 = s2.size();
char op = '+';
if (len2 > len1 || len2 == len1 && s2 > s1)
{
op = '-';
swap(s1, s2);
}
for (int i = 0; i < s1.size(); i++)
{
a[i] = s1[s1.size() - i - 1] - '0';
}
for (int i = 0; i < s2.size(); i++)
{
b[i] = s2[s2.size() - i - 1] - '0';
}
for (int i = 0; i < s1.size(); i++)
{
if (a[i] < b[i])
{ //借位
a[i] = 10 + a[i];
a[i + 1]--;
}
c[i] = a[i] - b[i];
}
int sp = 0; //打印c 去掉前面的0
for (int i = s1.size() - 1; i >= 0; i--)
{
if (c[i] != '0')
{
sp = i;
}
}
if (op == '-')
{
cout << op;
}
if (c[s1.size() - 1] == 0)
{
for (int i = s1.size() - 2; i >= sp; i--)
{
cout << c[i];
}
}
else
{
for (int i = s1.size() - 1; i >= sp; i--)
{
cout << c[i];
}
}
return 0;
}