用整型数组表示10进制大整数(超过2^32的整数),数组的每个元素存储大整数的一位数字,实现大整数的加减法。c++,用户自己输入数据
时间: 2024-03-18 17:39:55 浏览: 103
好的,这是一个常见的大整数加减法的实现方式。我们可以按照以下步骤进行:
1. 定义结构体`BigInt`,包含一个整数数组`data`和一个字符型变量`sign`,用于表示大整数的正负和每一位上的数字。
2. 重载加减法运算符。
3. 实现输入输出函数和构造函数。
以下是完整代码:
```c++
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 1005;
struct BigInt{
int data[MAXN];
char sign;
BigInt() { memset(data, 0, sizeof(data)); sign = '+'; }
BigInt(string s) { *this = BigInt(); fromString(s); }
void fromString(string s) {
int start = 0, len = s.length();
if (s[0] == '-') sign = '-', start = 1;
for (int i = start; i < len; i++)
data[len - i - 1] = s[i] - '0';
}
string toString() {
string s = (sign == '-') ? "-" : "";
int i = MAXN - 1;
while (i >= 0 && data[i] == 0) i--;
if (i < 0) return "0";
while (i >= 0) s += (data[i--] + '0');
return s;
}
};
BigInt operator + (BigInt a, BigInt b) {
BigInt c;
int carry = 0;
for (int i = 0; i < MAXN; i++) {
int sum = a.data[i] + b.data[i] + carry;
c.data[i] = sum % 10;
carry = sum / 10;
}
return c;
}
BigInt operator - (BigInt a, BigInt b) {
BigInt c;
int borrow = 0;
for (int i = 0; i < MAXN; i++) {
int diff = a.data[i] - b.data[i] - borrow;
if (diff < 0) diff += 10, borrow = 1;
else borrow = 0;
c.data[i] = diff;
}
return c;
}
int main() {
string sa, sb;
cout << "请输入两个大整数:" << endl;
cin >> sa >> sb;
BigInt a(sa), b(sb);
BigInt c = a + b;
BigInt d = a - b;
cout << a.toString() << " + " << b.toString() << " = " << c.toString() << endl;
cout << a.toString() << " - " << b.toString() << " = " << d.toString() << endl;
return 0;
}
```
这个程序能够读入两个大整数,然后计算它们的和与差,并输出结果。
阅读全文