用c语言编写程序,实现超长整数的加法运算和减法运算
时间: 2024-03-14 11:45:07 浏览: 87
好的,下面为您提供一个实现超长整数加减法运算的示例代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
void reverse(char* str, int len) {
int i = 0, j = len - 1;
while (i < j) {
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
i++;
j--;
}
}
void add(char* str1, char* str2, char* result) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int len = len1 > len2 ? len1 : len2;
int carry = 0;
int i, j;
for (i = len1 - 1, j = len2 - 1, len = len - 1; len >= 0; i--, j--, len--) {
int sum = carry;
if (i >= 0) sum += str1[i] - '0';
if (j >= 0) sum += str2[j] - '0';
result[len] = sum % 10 + '0';
carry = sum / 10;
}
if (carry > 0) {
printf("Result: 1%s\n", result);
} else {
printf("Result: %s\n", result);
}
}
void subtract(char* str1, char* str2, char* result) {
int len1 = strlen(str1);
int len2 = strlen(str2);
int len = len1 > len2 ? len1 : len2;
int borrow = 0;
int i, j;
int sign = 1;
if (len1 < len2 || (len1 == len2 && strcmp(str1, str2) < 0)) {
sign = -1;
char* tmp = str1;
str1 = str2;
str2 = tmp;
int tmp_len = len1;
len1 = len2;
len2 = tmp_len;
}
for (i = len1 - 1, j = len2 - 1, len = len - 1; len >= 0; i--, j--, len--) {
int diff = str1[i] - '0' - borrow;
if (j >= 0) diff -= str2[j] - '0';
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result[len] = diff + '0';
}
while (result[0] == '0' && len < len1 - 1) {
len++;
}
if (len == len1) {
printf("Result: 0\n");
} else {
if (sign == -1) {
printf("Result: -");
}
printf("Result: %s\n", result + len);
}
}
int main() {
char str1[MAX_LEN], str2[MAX_LEN], result[MAX_LEN];
printf("Please enter the first number: ");
scanf("%s", str1);
printf("Please enter the second number: ");
scanf("%s", str2);
// 对于加法运算,直接调用 add 函数
add(str1, str2, result);
// 对于减法运算,直接调用 subtract 函数
subtract(str1, str2, result);
return 0;
}
```
在这个示例代码中,我们定义了三个字符数组:`str1`、`str2` 和 `result`,分别用来存储第一个数、第二个数和结果。我们使用 `scanf` 函数从用户输入中读取这两个数的值。
接下来,我们定义了两个函数:`reverse` 和 `add`。`reverse` 函数用于反转字符串,`add` 函数用于实现加法运算。在 `add` 函数中,我们首先计算两个数的长度,然后从字符串的末尾开始,逐位相加,同时记录进位(如果有的话),最后将结果存储在 `result` 数组中。最后,我们判断最高位是否有进位,如果有的话,在最前面加上一个 1。
对于减法运算,我们定义了 `subtract` 函数。在 `subtract` 函数中,我们首先判断两个数的大小关系,将较大的数减去较小的数,最后根据符号加上或减去结果。具体来说,我们先将两个数的符号判断出来,然后将它们转化为同号相加的形式。然后,我们从字符串的末尾开始,逐位相减,同时记录借位(如果有的话),最后将结果存储在 `result` 数组中。
最后,我们在 `main` 函数中调用了 `add` 和 `subtract` 函数。
阅读全文