题目描述 请编写一个C语言程序来计算两个非负大整数的乘积,由于大整数可能会超过C语言的整型范围,因此要求采用字符串来存储输入和输出。 输入要求 输入两个非负大整数,采用字符串表示,长度均为[1, 200) 输出要求 输出两个大整数的乘积,采用字符串表示
时间: 2024-12-20 07:28:34 浏览: 7
C语言:实现两个整数的最小公倍数
要编写一个C语言程序来计算两个非负大整数的乘积,我们需要先解析输入的字符串,将它们转换为长整型(long long)以便处理超出int范围的大数值,然后再将结果转换回字符串输出。以下是一个示例程序:
```c
#include <stdio.h>
#include <stdlib.h> // 使用malloc动态分配内存
// 函数用于将字符串转换为长整型
long long str_to_long(const char* str) {
long long result = 0;
int sign = 1; // 初始化为正数
if (*str == '-') {
sign = -1;
str++;
}
while (*str != '\0') {
result *= 10;
result += *str - '0';
str++;
}
return sign * result;
}
// 函数用于将长整型转换为字符串
char* long_to_str(long long num, char* buffer, int len) {
int i = 0;
if (num < 0) {
buffer[0] = '-';
num = -num;
i = 1;
}
while (num > 0) {
buffer[i++] = num % 10 + '0'; // 添加数字到字符串
num /= 10;
}
buffer[i] = '\0'; // 结束字符串
reverse(buffer); // 反转字符串以保持正确的顺序
return buffer;
}
// 反转字符串
void reverse(char* str) {
int start = 0, end = strlen(str) - 1;
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
int main() {
char input1[201], input2[201], output[401]; // 输入和输出字符串,留有余地
printf("Enter two non-negative large integers (separated by space): ");
fgets(input1, sizeof(input1), stdin);
fgets(input2, sizeof(input2), stdin);
// 去除末尾的换行符
input1[strlen(input1) - 1] = '\0';
input2[strlen(input2) - 1] = '\0';
// 转换为long long类型并计算乘积
long long num1 = str_to_long(input1);
long long num2 = str_to_long(input2);
long long product = num1 * num2;
// 将乘积转换回字符串
strcpy(output, long_to_str(product, output, 400)); // 分配足够的空间
printf("The product of the two large integers is: %s\n", output);
return 0;
}
```
这个程序首先通过`fgets`从用户处接收输入,然后分别将这两个输入字符串转换为`long long`类型的数值。接着计算乘积并将结果转换回字符串形式。最后,输出乘积字符串。
阅读全文