对于20位以上的超长整数无法用int、long等基本类型表示,但可以考虑用字符串实现。 本关任务:编写程序,基于字符串实现对超长整数的加法运算和减法运算,输入两个超长整数和运算符(+或-),输出运算结果。 例如:输入123456789012345678901 + 123,输出123456789012345679024。 要求:输入的两个超长整数都是非负整数,并且长度都小于100位。对于减法运算,如果运算结果为负数要在前面加上负号。并且运算结果要去掉前导0,例如运算结果如果是000123,要变成123输出。 提示 对于加法,考虑先把两个数对齐,再按位加(要考虑进位),运算结果以字符串形式输出。 对于减法,先比较被减数和减数的大小,如果被减数小于减数,则需要交换被减数和减数,然后再按位减(要考虑借位)。 用c语言
时间: 2024-03-10 19:48:27 浏览: 83
C++中超长数类型的构造与实现
以下是使用 C 语言实现超长整数加减法的代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 101
void reverse(char *str) {
int i, len;
char temp;
len = strlen(str);
for (i = 0; i < len / 2; i++) {
temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
void add(char *num1, char *num2, char *result) {
int len1, len2, i, j, carry = 0;
char temp[MAX_LEN];
len1 = strlen(num1);
len2 = strlen(num2);
reverse(num1);
reverse(num2);
for (i = 0, j = 0; i < len1 || j < len2; i++, j++) {
int digit1 = i < len1 ? num1[i] - '0' : 0;
int digit2 = j < len2 ? num2[j] - '0' : 0;
int sum = digit1 + digit2 + carry;
temp[i] = sum % 10 + '0';
carry = sum / 10;
}
if (carry > 0) {
temp[i] = carry + '0';
i++;
}
temp[i] = '\0';
reverse(temp);
strcpy(result, temp);
}
void subtract(char *num1, char *num2, char *result) {
int len1, len2, i, j, borrow = 0;
char temp[MAX_LEN];
len1 = strlen(num1);
len2 = strlen(num2);
reverse(num1);
reverse(num2);
for (i = 0, j = 0; i < len1 || j < len2; i++, j++) {
int digit1 = i < len1 ? num1[i] - '0' : 0;
int digit2 = j < len2 ? num2[j] - '0' : 0;
int diff = digit1 - digit2 - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
temp[i] = diff + '0';
}
for (i = len1 - 1; i >= 0; i--) {
if (temp[i] != '0') {
break;
}
}
if (i < 0) {
temp[0] = '0';
temp[1] = '\0';
} else {
temp[i + 1] = '\0';
}
reverse(temp);
strcpy(result, temp);
}
int main() {
char num1[MAX_LEN], num2[MAX_LEN], result[MAX_LEN], op;
scanf("%s %c %s", num1, &op, num2);
if (op == '+') {
add(num1, num2, result);
printf("%s\n", result);
} else if (op == '-') {
if (strlen(num1) < strlen(num2) || (strlen(num1) == strlen(num2) && strcmp(num1, num2) < 0)) {
printf("-");
subtract(num2, num1, result);
} else {
subtract(num1, num2, result);
}
printf("%s\n", result);
}
return 0;
}
```
该程序中,reverse 函数用于将字符串翻转,add 函数用于实现超长整数的加法,subtract 函数用于实现超长整数的减法,主函数中读入超长整数和运算符,并根据运算符调用对应的函数进行计算,并输出结果。
阅读全文