用c++代码写编写程序接受两个任意大的整数,返回两个整数之积(提示:大整数用字符串表示)。 例如输入:999 999 输出:998001 输入:0 9999999999999999 输出:0
时间: 2023-06-03 07:03:28 浏览: 172
好的,这个问题我可以回答。以下是 C 语言代码:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 10000
// 定义大整数结构体
typedef struct {
int digit[MAX_LEN]; // 存储每一位的数字
int len; // 数字的位数
} BigInt;
// 大整数乘法
BigInt multiply(BigInt a, BigInt b) {
BigInt c;
memset(c.digit, 0, sizeof(c.digit)); // 初始化为0
c.len = a.len + b.len;
// 进行乘法计算,累加到结果数组 c 中
for (int i = 0; i < a.len; i++) {
for (int j = 0; j < b.len; j++) {
c.digit[i+j] += a.digit[i] * b.digit[j];
c.digit[i+j+1] += c.digit[i+j] / 10;
c.digit[i+j] %= 10;
}
}
// 处理前导0的情况
while (c.len > 1 && c.digit[c.len-1] == 0) {
c.len--;
}
return c;
}
// 字符串转化为大整数
BigInt strToBigInt(char str[]) {
BigInt a;
a.len = strlen(str);
for (int i = 0; i < a.len; i++) {
a.digit[i] = str[a.len-i-1] - '0';
}
return a;
}
// 大整数转化为字符串
char* BigIntToStr(BigInt a) {
char* str = (char*)malloc(sizeof(char) * MAX_LEN);
int i;
for (i = 0; i < a.len; i++) {
str[i] = a.digit[a.len-i-1] + '0';
}
str[i] = '\0';
return str;
}
int main() {
char str1[MAX_LEN], str2[MAX_LEN];
scanf("%s %s", str1, str2);
BigInt a = strToBigInt(str1);
BigInt b = strToBigInt(str2);
BigInt c = multiply(a, b);
char* result = BigIntToStr(c);
printf("%s\n", result);
free(result);
return 0;
}
```
希望能对你有所帮助。
阅读全文