对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。 提示 对于加法,考虑先把两个数对齐,再按位加(要考虑进位),运算结果以字符串形式输出。 对于减法,先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减(要考虑借位)。 测试说明 平台会对你编写的代码进行测试: 测试输入:123456789012345678901 + 123 预期输出:123456789012345679024,用c语言写
时间: 2024-03-10 10:48:23 浏览: 68
C代码实现超长整数字符串 相加,及相应执行程序
以下是基于字符串实现超长整数加减法的C语言代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 105
int main() {
char a[MAX_LEN], b[MAX_LEN], op;
scanf("%s %c %s", a, &op, b);
// 计算 a + b 或 a - b
char c[MAX_LEN];
int alen = strlen(a), blen = strlen(b);
int clen = alen > blen ? alen : blen;
int carry = 0, sign = 1;
for (int i = 0; i < clen; i++) {
int ai = alen - 1 - i >= 0 ? a[alen - 1 - i] - '0' : 0;
int bi = blen - 1 - i >= 0 ? b[blen - 1 - i] - '0' : 0;
int ci;
if (op == '+') {
ci = ai + bi + carry;
} else {
ci = ai - bi - carry;
if (ci < 0) {
ci += 10;
carry = 1;
} else {
carry = 0;
}
}
c[clen - 1 - i] = ci % 10 + '0';
carry += ci / 10;
}
// 处理进位或借位
if (carry) {
printf("%d", carry);
sign = 0;
}
if (op == '-' && carry) {
c[0] = '0' - c[0];
}
// 输出结果
int i = 0;
while (i < clen && c[i] == '0') i++;
if (i == clen) printf("0");
else {
if (op == '-' && sign == 0) printf("-");
printf("%s", c + i);
}
return 0;
}
```
代码思路:
1. 读入两个超长整数和运算符。
2. 根据运算符,逐位计算两个超长整数的加或减,并把结果存储在一个字符数组 `c` 中。
3. 处理进位或借位,并记录结果的符号。
4. 输出结果,处理前导0和负号。
阅读全文