与加法不同的是,减法多了一个判断大小的代码
始终用大的减去小的;
代码
#include “iostream”
using namespace std;
string add(string a, string b)
{
string c;
int t = 0, i = a.size() - 1, j = b.size() - 1;
while (i >= 0 || j >= 0)
{
t = a[i] - t - '0';
if (j >= 0)t -= (b[j] - '0');
c.push_back((t + 10) % 10 + '0');
if (t < 0)t = 1;
else t = 0;
i--; j--;
}
//去前导零
while (c.size() > 1 && c.back() == '0')c.pop_back();
return c;
}
bool cmp(string& a, string& b)
{
if (a.size() != b.size())
return a.size() >= b.size();
else
return a >= b;
}
int main()
{
string a, b, c;
cin >> a >> b;
if (cmp(a, b))
c = add(a, b);
else
{
cout << ‘-‘;
c = add(b, a);
}
for (int i = c.size() - 1; i >= 0; i–)
cout << c[i];
return 0;
}
代码中有个操作,是删去前导零,很值得参考学习。要我们删去连续的重复字符串时可以参考。
1 | while (c.size() > 1 && c.back() == '0')c.pop_back(); |
本文作者: jiangyuhao
本文链接: http://example.com/2022/01/30/%E9%AB%98%E7%B2%BE%E5%BA%A6%E5%87%8F%E6%B3%95/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!