#include<stdio.h> #include<string.h> #define MAX_LEN 1005 // 定义大整数的最大长度 // 将大整数存储在数组中 void str_to_int(char str[], int num[]) { int len = strlen(str); for (int i = 0; i < len; i++) { num[i] = str[len - 1 - i] - '0'; } } // 将数组中的大整数转换回字符串 void int_to_str(int num[], char str[]) { int len = 0; for (int i = MAX_LEN - 1; i >= 0; i--) { if (num[i] != 0) { len = i + 1; break; } } for (int i = 0; i < len; i++) { str[i] = num[len - 1 - i] + '0'; } str[len] = '\0'; } // 大整数乘法 void multiply(int a[], int b[], int c[]) { for (int i = 0; i < MAX_LEN; i++) { c[i] = 0; } for (int i = 0; i < MAX_LEN; i++) { for (int j = 0; j < MAX_LEN; j++) { c[i + j] += a[i] * b[j]; } } for (int i = 0; i < MAX_LEN; i++) { c[i + 1] += c[i] / 10; c[i] %= 10; } } int main() { char str1[MAX_LEN], str2[MAX_LEN]; scanf("%s %s", str1, str2); int num1[MAX_LEN], num2[MAX_LEN], res[MAX_LEN]; str_to_int(str1, num1); str_to_int(str2, num2); multiply(num1, num2, res); char str_res[MAX_LEN * 2]; int_to_str(res, str_res); printf("Product : %s\n", str_res); return 0; }完善该代码
时间: 2024-01-26 14:03:38 浏览: 59
C标准库函数集
5星 · 资源好评率100%
该代码是一个可以进行大整数乘法的程序,但还有一些可以完善的地方,如下:
1. 输入的两个大整数字符串可能会超过数组最大长度,需要进行判断和处理。
2. 输出的结果可能会有前导零,需要去除。
3. 如果输入的字符串中含有非数字字符,需要进行错误处理。
下面是完善后的代码:
```
#include<stdio.h>
#include<string.h>
#define MAX_LEN 1005 // 定义大整数的最大长度
// 将大整数存储在数组中
void str_to_int(char str[], int num[]) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
num[i] = str[len - 1 - i] - '0';
}
}
// 将数组中的大整数转换回字符串
void int_to_str(int num[], char str[]) {
int len = 0;
for (int i = MAX_LEN - 1; i >= 0; i--) {
if (num[i] != 0) {
len = i + 1;
break;
}
}
if (len == 0) { // 如果结果为0,直接输出0
str[0] = '0';
str[1] = '\0';
} else {
for (int i = 0; i < len; i++) {
str[i] = num[len - 1 - i] + '0';
}
str[len] = '\0';
}
}
// 大整数乘法
void multiply(int a[], int b[], int c[]) {
for (int i = 0; i < MAX_LEN; i++) {
c[i] = 0;
}
for (int i = 0; i < MAX_LEN; i++) {
for (int j = 0; j < MAX_LEN; j++) {
c[i + j] += a[i] * b[j];
}
}
for (int i = 0; i < MAX_LEN; i++) {
c[i + 1] += c[i] / 10;
c[i] %= 10;
}
}
int main() {
char str1[MAX_LEN], str2[MAX_LEN];
scanf("%s %s", str1, str2);
int len1 = strlen(str1);
int len2 = strlen(str2);
// 判断输入的字符串是否合法
for (int i = 0; i < len1; i++) {
if (str1[i] < '0' || str1[i] > '9') {
printf("Error: %s is not a valid integer!\n", str1);
return 0;
}
}
for (int i = 0; i < len2; i++) {
if (str2[i] < '0' || str2[i] > '9') {
printf("Error: %s is not a valid integer!\n", str2);
return 0;
}
}
int num1[MAX_LEN], num2[MAX_LEN], res[MAX_LEN * 2];
str_to_int(str1, num1);
str_to_int(str2, num2);
multiply(num1, num2, res);
char str_res[MAX_LEN * 2];
int_to_str(res, str_res);
printf("Product : %s\n", str_res);
return 0;
}
```
阅读全文