高精度加法代码
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char num1[505] = {};
char num2[505] = {};
cin >> num1 >> num2;
int num1_int[505] = {};
int num2_int[505] = {};
int len_num1 = strlen(num1);
int len_num2 = strlen(num2);
for (int i = 0; i <= len_num1-1; i++)
{
num1_int[len_num1-i-1] = num1[i] - 48;
}
for (int i = 0; i <= len_num2-1; i++)
{
num2_int[len_num2-i-1] = num2[i] - 48;
}
int len_ans = max(len_num1, len_num2);
int ans[505] = {};
int in = 0;
for (int i = 0; i <= len_ans-1; i++)
{
ans[i] = num1_int[i] + num2_int[i] + in;
in = ans[i] / 10;
ans[i] %= 10;
}
if (in > 0)
{
ans[len_ans] = in;
len_ans++;
}
for (int i = len_ans-1; i >= 0; i--)
{
cout << ans[i];
}
return 0;
}
高精度减法代码
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char num1[505] = {};
char num2[505] = {};
cin >> num1 >> num2;
int num1_int[505] = {};
int num2_int[505] = {};
int len_num1 = strlen(num1);
int len_num2 = strlen(num2);
for (int i = 0; i <= len_num1-1; i++)
{
num1_int[len_num1-i-1] = num1[i] - 48;
}
for (int i = 0; i <= len_num2-1; i++)
{
num2_int[len_num2-i-1] = num2[i] - 48;
}
int ans[505] = {};
int len_ans = len_num1;
for (int i = 0; i <= len_ans-1; i++)
{
if (num1_int[i] < num2_int[i])
{
num1_int[i+1]--;
num1_int[i] += 10;
}
ans[i] = num1_int[i] - num2_int[i];
}
while(ans[len_ans-1] == 0 && len_ans > 1)
{
len_ans--;
}
for (int i = len_ans-1; i >= 0; i--)
{
cout << ans[i];
}
return 0;
}
附:讲解
高精度加减法详细分析
附:减法完善(有负数情况的判断)
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char num1[505] = {};
char num2[505] = {};
cin >> num1 >> num2;
int num1_int[505] = {};
int num2_int[505] = {};
int len_num1 = strlen(num1);
int len_num2 = strlen(num2);
if (num1 == num2)
{
cout << 0;
return 0;
}
if (len_num1 < len_num2 || (len_num1 == len_num2 && strcmp(num1, num2) < 0))
{
swap(num1, num2);
swap(len_num1, len_num2);
cout << '-';
}
for (int i = 0; i <= len_num1-1; i++)
{
num1_int[len_num1-i-1] = num1[i] - 48;
}
for (int i = 0; i <= len_num2-1; i++)
{
num2_int[len_num2-i-1] = num2[i] - 48;
}
int ans[505] = {};
int len_ans = len_num1;
for (int i = 0; i <= len_ans-1; i++)
{
if (num1_int[i] < num2_int[i])
{
num1_int[i+1]--;
num1_int[i] += 10;
}
ans[i] = num1_int[i] - num2_int[i];
}
while(ans[len_ans-1] == 0 && len_ans > 1)
{
len_ans--;
}
for (int i = len_ans-1; i >= 0; i--)
{
cout << ans[i];
}
return 0;
}