用C语言写代码【问题描述】编写程序实现两个超长正整数(每个最长80位数字)的加法和乘法运算。 【输入形式】从当前目录下的plus.in文件读入以下内容: 1. 第一行是超长正整数A; 2. 第二行只有一个字符“+”或“*”,分别代表加、乘运算; 3. 第三行是超长正整数B。 【输出形式】输出到当前目录下的plus.out文件中。输出只有一行,是两个长整数的运算结果,从高到低依次输出各位数字。各位数字紧密输出,不带有前缀的多余的0。 在行尾要输出一个回车符。 【输入
时间: 2024-02-17 11:01:15 浏览: 100
以下是用C语言实现的代码,可以实现两个超长正整数的加法和乘法运算:
```c
#include <stdio.h>
#include <string.h>
#define MAXLEN 82
void add(char a[], char b[], char res[]) {
int lena = strlen(a);
int lenb = strlen(b);
int len = lena > lenb ? lena : lenb;
int carry = 0;
for (int i = 0; i < len; i++) {
int x = i < lena ? a[lena - 1 - i] - '0' : 0;
int y = i < lenb ? b[lenb - 1 - i] - '0' : 0;
int sum = x + y + carry;
res[len - 1 - i] = sum % 10 + '0';
carry = sum / 10;
}
if (carry) {
res[0] = carry + '0';
res[len + 1] = '\0';
} else {
res[0] = '0';
res[len] = '\0';
}
}
void mul(char a[], char b[], char res[]) {
int lena = strlen(a);
int lenb = strlen(b);
int len = lena + lenb;
int carry = 0;
for (int i = 0; i < len; i++) {
int sum = carry;
for (int j = 0; j <= i; j++) {
int x = j < lena ? a[lena - 1 - j] - '0' : 0;
int y = i - j < lenb ? b[lenb - 1 - (i - j)] - '0' : 0;
sum += x * y;
}
res[len - 1 - i] = sum % 10 + '0';
carry = sum / 10;
}
int i;
for (i = 0; i < len - 1 && res[i] == '0'; i++);
strcpy(res, res + i);
}
int main() {
char a[MAXLEN], b[MAXLEN], op, res[MAXLEN * 2];
scanf("%s %c %s", a, &op, b);
if (op == '+') {
add(a, b, res);
} else if (op == '*') {
mul(a, b, res);
}
printf("%s\n", res);
return 0;
}
```
注意,本程序默认输入的两个数都是非负整数,不支持负数运算。如果需要支持负数运算,可以在代码中做一些修改。
阅读全文