请用字符数组实现大整数相乘,C语言实现
时间: 2023-06-09 14:03:10 浏览: 56
好的,以下是一个简单的用字符数组实现大整数相乘的 C 代码示例:
#include <stdio.h>
#include <string.h>
void multiply(char* num1, char* num2, char* result) {
int len1 = strlen(num1);
int len2 = strlen(num2);
int* temp = (int*)malloc(sizeof(int) * (len1 + len2));
memset(temp, 0, sizeof(int) * (len1 + len2));
for (int i = len1 - 1; i >= 0; i--) {
for (int j = len2 - 1; j >= 0; j--) {
int index1 = i + j;
int index2 = i + j + 1;
int product = (num1[i] - '0') * (num2[j] - '0');
int sum = temp[index2] + product;
temp[index2] = sum % 10;
temp[index1] += sum / 10;
}
}
int index = 0;
while (index < len1 + len2 && temp[index] == 0) {
index++;
}
if (index == len1 + len2) {
result[0] = '0';
result[1] = '\0';
}
else {
for (int i = index; i < len1 + len2; i++) {
result[i - index] = temp[i] + '0';
}
result[len1 + len2 - index] = '\0';
}
free(temp);
}
int main() {
char num1[] = "123456789";
char num2[] = "987654321";
char result[20];
multiply(num1, num2, result);
printf("%s x %s = %s\n", num1, num2, result);
return 0;
}
注释:
- 使用了一个 int 数组 temp 存储相乘的结果。temp 数组的长度应该为 len1 + len2。
- 从两个数的个位开始,逐位相乘,并将结果加到 temp 数组中。
- 计算完之后,从 temp 数组的最高位开始,将非零的数存储到 result 中。
- 如果计算结果为 0,那么 result 中只存储一个字符 '0'。
希望能对你有所帮助!