高精度加法和减法是在计算机编程中常用的算法,用于处理超出计算机能力范围的大整数运算。在正常的计算机运算中,整数的范围是有限的,通常是32位或64位。但在某些场景中,需要进行超过这个范围的整数运算,这时就需要使用高精度加法和减法算法。
高精度加法是指对两个大整数进行相加的操作。算法的基本思想是从低位开始逐位相加,并将结果保存在一个新的整数中。如果两个被加数的对应位有进位,则在下一位相加时要将进位考虑进去。最终得到的结果即为两个大整数相加的结果。
高精度减法是指对两个大整数进行相减的操作。算法的基本思想是从低位开始逐位相减,并将结果保存在一个新的整数中。如果减数的对应位大于被减数的对应位,则需向高位借位。最终得到的结果即为两个大整数相减的结果。
1.高精度加法
#include <bits/stdc++.h>
#define ll long long
#define endl "\n"
#define KUI ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
const int con = 1e7 + 5;
int n, m, k;
int num1[520], num2[520], ans[520];
int main()
{
int temp = 0;
string num1c, num2c;
cin >> num1c >> num2c;
int len1 = num1c.size();
int len2 = num2c.size();
for (int i = len1 - 1; i >= 0; i--)
{
num1[len1 - 1 - i] = num1c[i] - '0';
}
for (int i = len2 - 1; i >= 0; i--)
{
num2[len2 - 1 - i] = num2c[i] - '0';
}
for (int i = 0; i <= 520; i++)
{
ans[i] = num2[i] + num1[i] + temp;
temp = ans[i] / 10;
ans[i] %= 10;
}
int len = max(len1, len2);
len += 2;
while (ans[len] == 0 && len > 0)
{
len--;
}
for (int i = len; i >= 0; i--)
{
cout << ans[i];
}
return 0;
}
2.高精度减法
#include <bits/stdc++.h>
#define ll long long
#define endl "\n"
#define KUI ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
const int con = 1e7 + 5;
string s1, s2;
int a[1000000], b[1000000], c[10000000];
int main()
{
cin >> s1 >> s2;
int lena = s1.size(), lenb = s2.size(), len, temp = 0;
for (int i = 0; i < lena; i++)
{
a[lena - i - 1] = s1[i] - '0';
}
for (int j = 0; j < lenb; j++)
{
b[lenb - j - 1] = s2[j] - '0';
}
len = lena > lenb ? lena : lenb;
if (s1 < s2 && lena == lenb || lena < lenb)
{
for (int i = 0; i < len; i++)
{
c[i] = b[i] - a[i] + temp;
if (c[i] < 0)
{
temp = -1;
c[i] += 10;
}
else
{
temp = 0;
}
}
cout << "-";
for (int i = len - 1; i >= 0; i--)
{
if (c[i] == 0 && i > 0)
len--;
else
break;
}
for (int i = len - 1; i >= 0; i--)
cout << c[i];
}
else
{
for (int i = 0; i < len; i++)
{
c[i] = a[i] - b[i] + temp;
if (c[i] < 0)
{
temp = -1;
c[i] += 10;
}
else
{
temp = 0;
}
}
for (int i = len - 1; i >= 0; i--)
{
if (c[i] == 0 && i > 0)
len--;
else
break;
}
for (int i = len - 1; i >= 0; i--)
{
cout << c[i];
}
return 0;
}
}