(个人水平有限,请见谅!)
描述:
两个长度超出常规整形变量上限的大数相减,请避免使用各语言内置大数处理库,如 Java.math.BigInteger 等。
输入:
有 N 行测试数据,每一行有两个代表整数的字符串 a 和 b,长度超过百位。规定 a>=b,a, b > 0。 测试结果可以用 linux 小工具 bc进行测试是否正确。
输出:
返回表示结果整数的字符串。
输入样例:
1231231237812739878951331231231237812739878951331231231237812739878951331231231237812739878951331231231237812739878951331231231237812739870-89513312312312378127398789513312312312378127398789513312312312378127398789513
1231231237812739878951331231231237812739878951331231231237812739878951331230000000000000000000000001-331231231237812739878951331231231
输出样例:
1231231237812739878951331231231237812739878951331231231237812650365639018918853110413950365639018918853110413950365639018918853110413950357
1231231237812739878951331231231237812739878951331231231237812739878620099998762187260121048668768770
代码示例:
#include <iostream>
#include <bits/stdc++.h>
#include <string>
using namespace std;
int main()
{
char line[1000001];
while (cin.getline(line, 1000000)) {
string result;
char cstr1[1000000], cstr2[1000000];
int before = 0;
sscanf(line, "%s - %s", &cstr1, &cstr2);
string str1 = cstr1;
string str2 = cstr2;
//cout << str1 << "iiiiiii" << str2;
for (int i = 0; i < str2.length(); i++){
int t = str1[str1.length()-i-1] - str2[str2.length()-i-1] - before;
if (t >= 0){
result += t + '0';
before = 0;
}
else {
result += t + 10 + '0';
before = 1;
}
}
for (int i = 0; i < str1.length()-str2.length(); i++){
int t = str1[str1.length()-str2.length()-i-1] - '0' - before;
if (t >= 0){
result += t + '0';
before = 0;
}
else {
result += t + 10 + '0';
before = 1;
}
}
if (result[result.size()-1] == '0')
result.erase(result.size()-1,1);
reverse(result.begin(),result.end());
cout << result << endl;
}
return 0;
}