C语言实现高精度加减法
简介
高精度计算是指多位数的加、减、乘、除等算法。在计算机程序设计中,常常需要进行高精度计算。C语言是一种强大的编程语言,可以通过C语言实现高精度的加、减法运算。
实现思路
1. 字符串存储
高精度计算需要用到大量的数字,超过了C语言中能够表示的整型、浮点型数据类型范围,因此可以采用字符串存储数字。
2. 进位处理
在高精度计算中,进位是必须要处理的问题。如果相加或相减的两个数相加/减的结果大于等于10,就需要将进位加到下一位的运算中。
3. 数组存储
为了方便计算,高精度数字通常都是使用数组的形式存储,每个元素存储一位数字。
4. 补位操作
进行高精度计算时,两个数字的长度可能会不相同,为了方便计算,需要对长度较短的数字进行补位操作,即在数字的最前面增加0。
实现代码
高精度加法
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define max_n 5050
void add(char str1[], char str2[], char ans[])
{
int len1 = strlen(str1);
int len2 = strlen(str2);
int len = len1 > len2 ? len1 : len2;
int a[max_n] = {0}, b[max_n] = {0}, c[max_n] = {0};
for (int i = 0; i < len1; i++) a[i] = str1[len1 - i - 1] - '0';
for (int i = 0; i < len2; i++) b[i] = str2[len2 - i - 1] - '0';
for (int i = 0; i < len; i++)
{
c[i] = a[i] + b[i] + c[i];
if (c[i] >= 10) c[i + 1]++, c[i] -= 10;
}
while (len > 0 && !c[len - 1]) len--;
if (len == 0) ans[0] = '0', ans[1] = '\0';
else
{
for (int i = 0; i < len; i++) ans[i] = c[len - i - 1] + '0';
ans[len] = '\0';
}
}
int main()
{
char str1[max_n], str2[max_n], ans[max_n];
scanf("%s%s", str1, str2);
add(str1, str2, ans);
printf("%s\n", ans);
return 0;
}
高精度减法
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define max_n 5050
int cmp(char str1[], char str2[])
{
int len1 = strlen(str1);
int len2 = strlen(str2);
if (len1 > len2) return 1;
if (len1 < len2) return -1;
for (int i = len1 - 1; i >= 0; i--)
if (str1[i] > str2[i]) return 1;
else if (str1[i] < str2[i]) return -1;
return 0;
}
void sub(char str1[], char str2[], char ans[])
{
int len1 = strlen(str1);
int len2 = strlen(str2);
int len = len1 > len2 ? len1 : len2;
int a[max_n] = {0}, b[max_n] = {0}, c[max_n] = {0};
int flag = cmp(str1, str2);
if (flag == 0) { ans[0] = '0'; ans[1] = '\0'; return; }
if (flag == -1) { strcpy(ans, "-"); char tmp[max_n]; strcpy(tmp, str1); strcpy(str1, str2); strcpy(str2, tmp); }
for (int i = 0; i < len1; i++) a[i] = str1[len1 - i - 1] - '0';
for (int i = 0; i < len2; i++) b[i] = str2[len2 - i - 1] - '0';
for (int i = 0; i < len; i++)
{
if (a[i] < b[i]) a[i] += 10, a[i + 1]--;
c[i] = a[i] - b[i];
}
while (len > 0 && !c[len - 1]) len--;
for (int i = 0; i < len; i++) ans[i] = c[len - i - 1] + '0';
ans[len] = '\0';
}
int main()
{
char str1[max_n], str2[max_n], ans[max_n];
scanf("%s%s", str1, str2);
sub(str1, str2, ans);
printf("%s\n", ans);
return 0;
}
示例说明
示例1
输入:
123456789
987654321
输出:
1111111110
示例2
输入:
123456789
234567890
输出:
-111111101
以上代码仅为高精度加减法的简单实现,实际的高精度计算中,还需要考虑诸多问题,例如高精度乘法、高精度除法等,读者可根据实际需要进行扩展。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现高精度加减法 - Python技术站