洛谷P2142
题目描述
高精度减法。
输入格式
两个整数 a,b(第二个可能比第一个大)。
输出格式
结果(是负数要输出负号)。
样例 #1
样例输入 #1
2
1
样例输出 #1
1
提示
#include<bits/stdc++.h>
using namespace std;
string s1, s2;
int s1_len, s2_len, mlen;
int a1[10086], a2[10086];
int res[10086];
bool com(string s1, string s2)
{
if (s1.size() > s2.size()) return true;
if (s1.size() < s2.size()) return false;
if (s1.size() == s2.size())
{
for (int i = 0; i < s1.size(); i++)
{
if (s1[i] != s2[i]) return s1[i] > s2[i];
}
return true;
}
}
int main()
{
cin >> s1 >> s2;
bool comp;
comp = com(s1,s2);
if (comp == false)
{
s1.swap(s2);
}
s1_len = s1.size();
s2_len = s2.size();
reverse(s1.begin(), s1.end());reverse(s2.begin(), s2.end());
mlen = max(s1_len, s2_len);
for (int i = 0; i < s1_len; i++) a1[i] = s1[i] - '0';
for (int i = 0; i < s2_len; i++) a2[i] = s2[i] - '0';
for (int i = 0; i < mlen; i++)
{
if (a1[i] < a2[i])
{
a1[i + 1]--;
a1[i] += 10;
}
res[i] = a1[i] - a2[i];
}
int num = mlen - 1;
while (res[num] == 0 && num > 0) num--;
if (comp == false)cout << '-';
for (int k = num; k >=0; k--)cout << res[k];
return 0;
}