用整型数组表示10进制大整数(超过2^32的整数),数组的每个元素存储大整数的一位数字,实现大整数的加减法。c++
时间: 2024-03-18 07:39:34 浏览: 40
好的,我会尽力回答你的问题。针对你的问题,我可以提供以下的C++代码,以实现大整数的加减法。其中,数组num1和num2表示要进行加减的两个大整数,数组res表示加减结果。
```c++
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int MAXN = 100; // 数组最大长度
int num1[MAXN], num2[MAXN], res[MAXN];
void add(int a[], int b[], int c[]) { // 大整数加法
int lena = strlen(a), lenb = strlen(b);
reverse(a, a + lena); reverse(b, b + lenb); // 翻转数组
int len = max(lena, lenb);
for (int i = 0, carry = 0; i < len; i++) {
int x = i < lena ? a[i] : 0;
int y = i < lenb ? b[i] : 0;
int z = x + y + carry;
c[i] = z % 10;
carry = z / 10;
}
if (carry) c[len++] = carry; // 处理最高位进位
reverse(c, c + len); // 翻转数组
}
bool cmp(int a[], int b[], int lena, int lenb) { // 大整数比较
if (lena != lenb) return lena < lenb;
for (int i = lena - 1; i >= 0; i--)
if (a[i] != b[i]) return a[i] < b[i];
return false;
}
void sub(int a[], int b[], int c[]) { // 大整数减法
int lena = strlen(a), lenb = strlen(b);
reverse(a, a + lena); reverse(b, b + lenb); // 翻转数组
int len = lena;
for (int i = 0, carry = 0; i < len; i++) {
int x = a[i];
int y = i < lenb ? b[i] : 0;
int z = x - y - carry;
if (z < 0) z += 10, carry = 1;
else carry = 0;
c[i] = z;
}
while (len > 1 && c[len - 1] == 0) len--; // 去除前导0
reverse(c, c + len); // 翻转数组
}
int main() {
char str1[MAXN], str2[MAXN];
cin >> str1 >> str2;
int len1 = strlen(str1), len2 = strlen(str2);
for (int i = 0; i < len1; i++) num1[i] = str1[len1 - i - 1] - '0';
for (int i = 0; i < len2; i++) num2[i] = str2[len2 - i - 1] - '0';
if (cmp(num1, num2, len1, len2)) { // 确保num1 >= num2
swap(num1, num2);
swap(len1, len2);
cout << "-";
}
add(num1, num2, res);
for (int i = 0; i < len1 || i < len2; i++) cout << res[i];
cout << endl;
sub(num1, num2, res);
for (int i = 0; i < strlen(str1) || i < strlen(str2); i++) {
if (res[i] != 0 || i == strlen(str1) - 1) {
if (i > 0 && str1[0] == '-' && res[i] != 0) cout << "-";
cout << res[i];
}
}
return 0;
}
```
希望这份代码能够帮到你。如果你还有其他问题,可以继续提出。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![xlsx](https://img-home.csdnimg.cn/images/20210720083732.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)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)