分别给我一个高精度乘法和高精度除法的c语言代码
时间: 2024-04-17 15:22:51 浏览: 103
当然!以下是一个用C语言实现的高精度乘法和高精度除法的代码示例:
高精度乘法:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
void multiply(char *num1, char *num2, char *result) {
int len1 = strlen(num1);
int len2 = strlen(num2);
int len = len1 + len2;
int i, j, k;
int carry;
int temp;
int product;
int *multiplyArray = (int *)malloc(len * sizeof(int));
memset(multiplyArray, 0, len * sizeof(int));
for (i = len1 - 1; i >= 0; i--) {
carry = 0;
for (j = len2 - 1; j >= 0; j--) {
temp = (num1[i] - '0') * (num2[j] - '0') + carry + multiplyArray[i + j + 1];
product = temp % 10;
carry = temp / 10;
multiplyArray[i + j + 1] = product;
}
multiplyArray[i + j + 1] = carry;
}
k = 0;
for (i = 0; i < len; i++) {
if (multiplyArray[i] != 0 || k != 0) {
result[k++] = multiplyArray[i] + '0';
}
}
result[k] = '\0';
free(multiplyArray);
}
int main() {
char num1[MAX_LEN];
char num2[MAX_LEN];
char result[MAX_LEN * 2];
printf("请输入乘数: ");
scanf("%s", num1);
printf("请输入被乘数: ");
scanf("%s", num2);
multiply(num1, num2, result);
printf("乘法结果: %s\n", result);
return 0;
}
```
高精度除法:
```c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000
int compare(char *num1, char *num2) {
int len1 = strlen(num1);
int len2 = strlen(num2);
if (len1 > len2) {
return 1;
} else if (len1 < len2) {
return -1;
} else {
return strcmp(num1, num2);
}
}
void subtract(char *num1, char *num2) {
int len1 = strlen(num1);
int len2 = strlen(num2);
int i, diff;
int borrow = 0;
for (i = 0; i < len2; i++) {
diff = (num1[i] - '0') - (num2[i] - '0') - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
num1[i] = diff + '0';
}
for (; i < len1; i++) {
diff = (num1[i] - '0') - borrow;
if (diff < 0) {
diff += 10;
borrow = 1;
} else {
borrow = 0;
}
num1[i] = diff + '0';
}
i = len1 - 1;
while (i > 0 && num1[i] == '0') {
num1[i] = '\0';
i--;
}
}
void divide(char *num1, char *num2, char *result) {
int len1 = strlen(num1);
int len2 = strlen(num2);
if (compare(num1, num2) < 0) {
strcpy(result, "0");
return;
}
char remainder[MAX_LEN];
memset(remainder, '\0', sizeof(remainder));
int idx = 0;
char temp[MAX_LEN];
for (int i = 0; i < len2; i++) {
temp[idx++] = num1[i];
}
for (int i = len2; i <= len1; i++) {
int count = 0;
while (compare(temp, num2) >= 0) {
subtract(temp, num2);
count++;
}
result[i - len2] = count + '0';
if (i < len1) {
strcat(temp, &num1[i]);
}
}
strcpy(remainder, temp);
}
int main() {
char num1[MAX_LEN];
char num2[MAX_LEN];
char result[MAX_LEN];
printf("请输入被除数: ");
scanf("%s", num1);
printf("请输入除数: ");
scanf("%s", num2);
divide(num1, num2, result);
printf("整数商: %s\n", result);
return 0;
}
```
你可以输入两个数字进行测试,代码会计算并输出乘法结果和除法结果。请注意,这些代码只适用于非负整数的高精度乘法和除法运算。
阅读全文
相关推荐















