本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。用指针
时间: 2024-03-08 12:50:30 浏览: 146
好的,我可以帮你完成这个任务。以下是我的代码实现,使用指针实现加法和减法运算:
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LEN 1000
int main() {
char num1[MAX_LEN], num2[MAX_LEN], result[MAX_LEN];
char *p1, *p2, *pr;
int carry = 0, len1, len2, len, i, j, k;
// 读入两个超长整数和运算符
printf("请输入两个超长整数和运算符(+ 或 -):\n");
scanf("%s%s", num1, num2);
getchar(); // 读掉换行符
char op = getchar();
// 指针初始化
len1 = strlen(num1);
len2 = strlen(num2);
len = len1 > len2 ? len1 : len2;
p1 = num1 + len1 - 1;
p2 = num2 + len2 - 1;
pr = result + len;
// 计算
for (i = 0; i < len; i++) {
k = ((p1 >= num1) ? (*p1 - '0') : 0)
+ ((p2 >= num2) ? (*p2 - '0') : 0)
+ carry;
carry = k / 10;
*pr = k % 10 + '0';
p1--, p2--, pr--;
}
if (carry) *pr = carry + '0';
else pr++;
// 处理结果
if (op == '+') printf("%s + %s = %s\n", num1, num2, pr);
else if (op == '-') {
if (strcmp(num1, num2) < 0) {
printf("无法进行减法运算!\n");
return 0;
}
p1 = num1 + len1 - 1;
p2 = num2 + len2 - 1;
pr = result + len;
carry = 0;
for (i = 0; i < len; i++) {
k = (*p1 - '0') - ((p2 >= num2) ? (*p2 - '0') : 0) - carry;
if (k < 0) {
k += 10;
carry = 1;
} else carry = 0;
*pr = k + '0';
p1--, p2--, pr--;
}
while (*pr == '0' && pr < result + len - 1) pr++;
printf("%s - %s = %s\n", num1, num2, pr);
} else printf("无效的运算符!\n");
return 0;
}
```
这个程序可以读入两个超长整数和一个运算符,然后使用指针实现加法和减法运算。在加法运算中,我们从两个数的最低位开始,一位一位地相加,同时考虑进位。在减法运算中,我们先比较两个数的大小,如果被减数小于减数,则无法进行减法运算。否则,我们也从两个数的最低位开始,一位一位地相减,同时考虑借位。最后,我们需要去掉结果中的前导零。
你可以在本地编译运行这个程序,输入两个超长整数和运算符,查看程序的输出结果。
阅读全文