用整型数组表示10进制大整数(超过2^32的整数),数组的每个元素存储大整数的一位数字,实现大整数的加减法。
时间: 2024-01-22 22:21:28 浏览: 72
以下是用C++实现大整数加减法的代码示例:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1005; // 数组大小
int a[MAXN], b[MAXN], c[MAXN]; // 存储大整数a、b和结果c
char str[MAXN]; // 输入的字符串
void reverse(char s[]) { // 字符串反转
int len = strlen(s);
for (int i = 0; i < len / 2; ++i) {
swap(s[i], s[len - 1 - i]);
}
}
void strToArr(char s[], int arr[]) { // 字符串转换为整型数组
int len = strlen(s);
for (int i = 0; i < len; ++i) {
arr[i] = s[len - 1 - i] - '0';
}
}
void arrToStr(int arr[], char s[]) { // 整型数组转换为字符串
int len = 0;
for (int i = MAXN - 1; i >= 0; --i) {
if (arr[i] != 0) {
len = i + 1;
break;
}
}
for (int i = 0; i < len; ++i) {
s[i] = arr[len - 1 - i] + '0'; // 转换为字符
}
s[len] = '\0';
}
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;
}
}
}
int main() {
// 输入两个大整数
cin >> str;
reverse(str);
strToArr(str, a);
cin >> str;
reverse(str);
strToArr(str, b);
// 计算和并输出结果
add(a, b, c);
arrToStr(c, str);
reverse(str);
cout << str << endl;
// 计算差并输出结果
sub(a, b, c);
arrToStr(c, str);
reverse(str);
cout << str << endl;
return 0;
}
```
在本示例中,我们假设大整数最多有1000位,因此数组大小为1005(需要多出一位用来存储进位或借位)。该程序的思路是先将输入的字符串反转,然后将其转换为整型数组,方便进行加减法运算。最后将结果数组转换为字符串,再反转输出即可。
阅读全文