本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。用指针
时间: 2024-03-15 16:47:33 浏览: 108
好的,我可以帮您编写这个程序。以下是代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 10000 // 定义最大的字符串长度
void reverse(char* str) {
// 反转字符串
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = temp;
}
}
void add(char* num1, char* num2, char* result) {
// 对两个超长整数进行加法运算
int carry = 0; // 进位数
int len1 = strlen(num1);
int len2 = strlen(num2);
int i, j, k;
for (i = len1 - 1, j = len2 - 1, k = 0; i >= 0 || j >= 0; i--, j--, k++) {
int x = (i >= 0) ? num1[i] - '0' : 0;
int y = (j >= 0) ? num2[j] - '0' : 0;
int sum = x + y + carry;
result[k] = sum % 10 + '0';
carry = sum / 10;
}
if (carry) {
result[k] = carry + '0';
k++;
}
result[k] = '\0';
reverse(result);
}
void subtract(char* num1, char* num2, char* result) {
// 对两个超长整数进行减法运算
int borrow = 0; // 借位数
int len1 = strlen(num1);
int len2 = strlen(num2);
int i, j, k;
for (i = len1 - 1, j = len2 - 1, k = 0; i >= 0 || j >= 0; i--, j--, k++) {
int x = (i >= 0) ? num1[i] - '0' : 0;
int y = (j >= 0) ? num2[j] - '0' : 0;
int diff = x - y - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
result[k] = diff + '0';
}
while (k > 1 && result[k - 1] == '0') {
k--;
}
result[k] = '\0';
reverse(result);
}
int main() {
char num1[MAX_LEN], num2[MAX_LEN], op;
scanf("%s %s %c", num1, num2, &op);
char result[MAX_LEN];
if (op == '+') {
add(num1, num2, result);
} else if (op == '-') {
subtract(num1, num2, result);
} else {
printf("Invalid operator!\n");
return 0;
}
printf("%s\n", result);
return 0;
}
```
该程序包含两个函数 `add` 和 `subtract`,分别用于对两个超长整数进行加法和减法运算。在主函数中,我们首先读入两个超长整数和运算符,然后根据运算符调用相应的函数进行运算,最后输出结果。
需要注意的是,由于我们使用的是字符串来表示超长整数,所以在进行加减法运算时要注意进位和借位的处理。同时,由于输入的字符串可能以 0 开头,所以在输出结果时需要去掉前导 0。
希望这个程序能够帮助到您。
阅读全文