c语言高精度加法乘法
时间: 2023-10-26 21:27:02 浏览: 119
对于C语言中的高精度加法和乘法,可以使用字符串或数组来实现。下面是一个简单的示例代码:
```c
#include <stdio.h>
#include <string.h>
// 字符串形式的高精度加法
char* highPrecisionAdd(char* num1, char* num2) {
int len1 = strlen(num1);
int len2 = strlen(num2);
int maxLen = (len1 > len2 ? len1 : len2) + 1;
char* result = (char*)malloc((maxLen + 1) * sizeof(char)); // 申请足够的空间存放结果
result[maxLen] = '\0'; // 结果字符串结尾
int carry = 0; // 进位
int i = len1 - 1;
int j = len2 - 1;
int k = maxLen - 1;
while (i >= 0 || j >= 0) {
int n1 = (i >= 0 ? num1[i] - '0' : 0);
int n2 = (j >= 0 ? num2[j] - '0' : 0);
int sum = n1 + n2 + carry;
result[k] = sum % 10 + '0'; // 计算当前位的值
carry = sum / 10; // 计算进位
i--;
j--;
k--;
}
if (carry > 0) {
result[k] = carry + '0'; // 如果最高位有进位,需要在最前面加上
}
else {
// 去掉最高位的0
char* tmp = (char*)malloc(len1 + 1);
strcpy(tmp, result + 1);
free(result);
result = tmp;
}
return result;
}
// 数组形式的高精度乘法
void highPrecisionMultiply(int num1[], int len1, int num2[], int len2, int result[]) {
int maxLen = len1 + len2;
for (int i = 0; i < maxLen; i++) {
result[i] = 0; // 初始化结果数组为0
}
for (int i = len1 - 1; i >= 0; i--) {
for (int j = len2 - 1; j >= 0; j--) {
int mul = num1[i] * num2[j];
int sum = result[i + j + 1] + mul;
result[i + j] += sum / 10;
result[i + j + 1] = sum % 10;
}
}
}
int main() {
// 高精度加法示例
char num1[] = "123456789";
char num2[] = "987654321";
char* sum = highPrecisionAdd(num1, num2);
printf("Sum: %s\n", sum);
free(sum);
// 高精度乘法示例
int num3[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int num4[] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
int len1 = sizeof(num3) / sizeof(num3[0]);
int len2 = sizeof(num4) / sizeof(num4[0]);
int result[len1 + len2];
highPrecisionMultiply(num3, len1, num4, len2, result);
printf("Product: ");
for (int i = 0; i < len1 + len2; i++) {
printf("%d", result[i]);
}
printf("\n");
return 0;
}
```
以上代码示例了如何使用字符串和数组来实现高精度加法和乘法。其中,高精度加法使用字符串存储数字,逐位相加,并处理进位。高精度乘法使用数组存储数字,按照乘法规则逐位计算,并将结果保存在结果数组中。运行以上示例代码,可以得到高精度加法和乘法的结果。
阅读全文
相关推荐
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044901.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)