给定两个正整数(不含前导 0
),计算它们的差,计算结果可能为负数。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的差。
数据范围
1≤整数长度≤105
输入样例:
32
11
输出样例:
21
#include<iostream>
#include<vector>
#include<iterator>
using namespace std;
void minus1(vector<int>& a, vector<int>::iterator c)
{
while (c < a.end() && (*c == 0))
{
*c = 9;
c++;
}
*c = *c - 1;
return;
}
void m1inus(vector<int>& a)
{
vector<int>::iterator c = a.begin();
while (*c == 0)
c++;
*c = 10 - *c;
c++;
while (c < a.end())
{
*c = 9 - *c;
c++;
}
}
vector<int> add(vector<int>& a, vector<int>& b, vector<int>& d)
{
if (a.size() < b.size())
return add(b, a,d);
int i = 0;
for (int k = 0; k< a.size(); k++)
{
i += a[k];
if (k < b.size())
i += b[k];
d.push_back(i % 10);
i = i / 10;
};
if (i)
d.push_back(1);
return d;
}
int main()
{
string a, b;
cin >> a;
cin >> b;
vector<int>c, d, e;
for (int k = a.size() - 1; k >= 0; k--)
{
c.push_back(a[k]-48);
};
for (int i = b.size() - 1; i >= 0; i--)
{
d.push_back(b[i]-48);
};
m1inus(d);
add(d, c,e);
if (e.size() >= (b.size() + 1))
{
minus1(e, e.begin() + b.size());
while(e.size() > 1 && e.back() == 0) e.pop_back();
for (int g = e.size()-1; g >= 0; g--)
cout << e[g];
return 0;
}
else
{
m1inus(e);
cout << '-';
while(e.size() > 1 && e.back() == 0) e.pop_back();
for (int g = e.size()-1; g >= 0; g--)
cout << e[g];
return 0;
}
}