用整型数组表示10进制大整数(超过2^32的整数),数组的每个元素存储大整数的一位数字,实现大整数的加减法。用c++实现,用户自己输入数据
时间: 2024-03-18 20:39:48 浏览: 58
好的,我可以为您编写这个程序。首先,我们需要定义一个结构体来表示大整数:
```c++
struct BigNum {
static const int MAX_LEN = 1000; // 大整数最大长度
int len; // 大整数的长度
int digits[MAX_LEN]; // 大整数的每一位数字,低位存储在数组的低位
BigNum() : len(0) { memset(digits, 0, sizeof(digits)); } // 初始化为0
};
```
然后,我们可以定义加法和减法的函数:
```c++
// 大整数加法
BigNum add(const BigNum& a, const BigNum& b) {
BigNum c;
c.len = max(a.len, b.len);
for (int i = 0; i < c.len; ++i) {
c.digits[i] += a.digits[i] + b.digits[i];
if (c.digits[i] >= 10) {
c.digits[i] -= 10;
c.digits[i + 1]++;
}
}
if (c.digits[c.len] > 0) c.len++;
return c;
}
// 大整数减法
BigNum sub(const BigNum& a, const BigNum& b) {
BigNum c;
c.len = a.len;
for (int i = 0; i < c.len; ++i) {
c.digits[i] += a.digits[i] - b.digits[i];
if (c.digits[i] < 0) {
c.digits[i] += 10;
c.digits[i + 1]--;
}
}
while (c.len > 1 && c.digits[c.len - 1] == 0) c.len--;
return c;
}
```
接下来,我们可以编写一个函数来读取大整数:
```c++
// 读取大整数
BigNum readBigNum() {
BigNum a;
char s[BigNum::MAX_LEN + 1];
scanf("%s", s);
a.len = strlen(s);
for (int i = 0; i < a.len; ++i) {
a.digits[i] = s[a.len - i - 1] - '0';
}
return a;
}
```
最后,我们可以编写一个主函数来测试这些函数:
```c++
int main() {
BigNum a = readBigNum();
BigNum b = readBigNum();
BigNum c = add(a, b);
BigNum d = sub(a, b);
printf("a + b = ");
for (int i = c.len - 1; i >= 0; --i) printf("%d", c.digits[i]);
printf("\n");
printf("a - b = ");
for (int i = d.len - 1; i >= 0; --i) printf("%d", d.digits[i]);
printf("\n");
return 0;
}
```
这个程序可以读取两个大整数,然后计算它们的和与差,并输出结果。
阅读全文