riqilang wu 给定3个正整数A、B、C(这些正整数可能非常非常的大!),请你计算表达式A+(B-C)的值,用c++大整数加减法实现
时间: 2024-01-06 15:04:46 浏览: 70
好的,我可以帮你实现这个功能。以下是代码示例:
```c++
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN = 10010;
int a[MAXN], b[MAXN], c[MAXN];
// 大整数加法
void add(int* a, int* b, int* c) {
int carry = 0;
for(int i = 0; i < MAXN; i++) {
c[i] = a[i] + b[i] + carry;
carry = c[i] / 10;
c[i] %= 10;
}
}
// 大整数减法
void sub(int* a, int* b, int* c) {
int borrow = 0;
for(int i = 0; i < MAXN; i++) {
c[i] = a[i] - b[i] - borrow;
if(c[i] < 0) {
c[i] += 10;
borrow = 1;
}
else {
borrow = 0;
}
}
}
// 去除前导0
void trim(int* a) {
int len = strlen((char*)a);
int i = len - 1;
while(i >= 0 && a[i] == 0) {
i--;
}
a[i+1] = '\0';
}
int main() {
// 读入三个大整数
char stra[MAXN], strb[MAXN], strc[MAXN];
cin >> stra >> strb >> strc;
int lena = strlen(stra);
int lenb = strlen(strb);
int lenc = strlen(strc);
for(int i = 0; i < lena; i++) {
a[i] = stra[lena-i-1] - '0';
}
for(int i = 0; i < lenb; i++) {
b[i] = strb[lenb-i-1] - '0';
}
for(int i = 0; i < lenc; i++) {
c[i] = strc[lenc-i-1] - '0';
}
// 计算值
int t[MAXN];
sub(b, c, t);
add(a, t, t);
trim(t);
// 输出结果
for(int i = strlen((char*)t)-1; i >= 0; i--) {
cout << t[i];
}
cout << endl;
return 0;
}
```
你可以将三个大整数以字符串的形式输入,然后使用上述代码计算表达式的值,最后输出结果。
阅读全文