用整型数组表示10进制大整数(超过2^32的整数),数组的每个元素存储大整数的一位数字,实现大整数的加减法。
时间: 2024-02-01 08:14:35 浏览: 44
这里给出一个简单的实现,可以参考:
```c++
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
// 两个整数相加,结果存储在第一个整数中
void add(vector<int>& a, vector<int>& b) {
int carry = 0; // 进位
for (int i = 0; i < a.size() || i < b.size(); i++) {
if (i < a.size()) {
carry += a[i];
}
if (i < b.size()) {
carry += b[i];
}
if (i < a.size()) {
a[i] = carry % 10;
} else {
a.push_back(carry % 10);
}
carry /= 10;
}
if (carry) {
a.push_back(carry);
}
reverse(a.begin(), a.end());
}
// 判断a是否大于等于b
bool cmp(vector<int>& a, vector<int>& b) {
if (a.size() != b.size()) {
return a.size() > b.size();
}
for (int i = a.size() - 1; i >= 0; i--) {
if (a[i] != b[i]) {
return a[i] > b[i];
}
}
return true;
}
// 两个整数相减,结果存储在第一个整数中
void sub(vector<int>& a, vector<int>& b) {
for (int i = 0; i < a.size() || i < b.size(); i++) {
if (i < b.size()) {
a[i] -= b[i];
}
if (a[i] < 0) {
a[i] += 10;
a[i + 1]--;
}
}
while (a.size() > 1 && a.back() == 0) {
a.pop_back();
}
}
int main() {
string s1, s2;
cin >> s1 >> s2;
vector<int> a, b;
for (int i = s1.size() - 1; i >= 0; i--) {
a.push_back(s1[i] - '0');
}
for (int i = s2.size() - 1; i >= 0; i--) {
b.push_back(s2[i] - '0');
}
vector<int> sum = a;
add(sum, b);
cout << "sum: ";
for (int i = sum.size() - 1; i >= 0; i--) {
cout << sum[i];
}
cout << endl;
vector<int> diff;
if (cmp(a, b)) {
diff = a;
sub(diff, b);
cout << "diff: ";
for (int i = diff.size() - 1; i >= 0; i--) {
cout << diff[i];
}
cout << endl;
} else {
diff = b;
sub(diff, a);
cout << "diff: -";
for (int i = diff.size() - 1; i >= 0; i--) {
cout << diff[i];
}
cout << endl;
}
return 0;
}
```
这个实现中,我们将大整数转化成了一个整型数组,数组的每个元素存储大整数的一位数字。加法和减法的实现都比较简单,主要是对数组的操作。需要注意的是,减法的时候需要判断被减数是否大于减数,如果不是,需要输出负数。
相关推荐
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)