给定3个正整数A、B、C(这些正整数可能非常非常的大!),请你计算表达式A+(B-C)的值,用c++大整数加减法实现,不用大整数库
时间: 2024-02-11 18:07:41 浏览: 111
好的,我可以帮你实现。我们可以使用字符串来表示大整数,并手动实现大整数的加、减、比较等运算。
下面给出一个示例代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
string add(string num1, string num2) {
string res;
int carry = 0, i = num1.size() - 1, j = num2.size() - 1;
while (i >= 0 || j >= 0 || carry) {
int x = i >= 0 ? num1[i--] - '0' : 0;
int y = j >= 0 ? num2[j--] - '0' : 0;
int sum = x + y + carry;
res += '0' + sum % 10;
carry = sum / 10;
}
reverse(res.begin(), res.end());
return res;
}
string sub(string num1, string num2) {
string res;
int borrow = 0, i = num1.size() - 1, j = num2.size() - 1;
while (i >= 0 || j >= 0) {
int x = i >= 0 ? num1[i--] - '0' : 0;
int y = j >= 0 ? num2[j--] - '0' : 0;
int diff = x - y - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
res += '0' + diff;
}
reverse(res.begin(), res.end());
while (res.size() > 1 && res[0] == '0') {
res.erase(0, 1);
}
return res;
}
bool lessThan(string num1, string num2) {
if (num1.size() != num2.size()) {
return num1.size() < num2.size();
}
for (int i = 0; i < num1.size(); i++) {
if (num1[i] != num2[i]) {
return num1[i] < num2[i];
}
}
return false;
}
int main() {
string A, B, C;
cin >> A >> B >> C;
string result;
if (lessThan(B, C)) {
result = add(A, sub(B, C));
} else {
result = add(A, sub(B, C));
}
cout << result << endl;
return 0;
}
```
在这个示例代码中,我们首先定义了三个字符串变量 A、B、C,并通过 `cin` 进行输入。然后,我们手动实现了大整数的加法和减法,分别使用 `add` 和 `sub` 函数实现。在比较大小时,我们使用 `lessThan` 函数实现。最后,根据 B 和 C 的大小关系,使用不同的方式计算结果。最后使用 `cout` 输出结果。
使用这个示例代码,我们就可以高精度地计算表达式 A+(B-C) 的值了。
阅读全文