一:高精度算法——减法
#include<iostream>
#include<string.h>
#define MAXLEN
#define RMAXLEN
using namespace std;
string s1,s2;
int a[MAXLEN],b[MAXLEN],c[RMAXLEN];
string fun_sub(string s1, string s2)
{
memset(a, 0, sizeof(int) * MAXLEN);
memset(b, 0, sizeof(int) * MAXLEN);
memset(c, 0, sizeof(int) * RMAXLEN);
bool isNn = false;
if (s1.length() < s2.length() | s1.length() = s2.length() && s1 < s2) {
swap(s1, s2);
isNn = true;
}
int len = s1.length();
for (int i = 0; i < len; i++) {
a[len - 1 - i] = s1[i] - '0';
}
len = s2.length();
for (int i = 0; i < len; i++) {
b[len - 1 - i] = s2[i] - '0';
}
len = s1.length();
for (int i = 0; i < len; i++) {
if (b[i] > a[i]) {
a[i + 1] -= 1;
a[i] += 10;
}
c[i] = a[i] - b[i];
}
while (c[len - 1] == 0 && len > 1)
{
len--;
}
string ans;
if (isNn == true) {
ans = "-";
}
for (int i = len - 1; i >= 0; i--) {
ans += c[i] + '0';
}
return ans;
}
int mian() {
cin >> s1 >> s2;
string ans = fun_sub(s1, s2);
cout << ans;
return 0;
}
二:高精度算法——高精度乘以低精度
#include<iostream>
#include<string.h>
#define MAXLEN
#define RMAXLEN
using namespace std;
string s1;
int a[MAXLEN], b, c[RMAXLEN];
string mul_sub(string s1,int b)
{
memset(a, 0, sizeof(int) * MAXLEN);
memset(c, 0, sizeof(int) * RMAXLEN);
int len = s1.length();
for (int i = 0; i < len; i++) {
a[len - 1 - i] = s1[i] - '0';
}
for (int i = 0; i < len; i++) {
c[i] += a[i] * b;
c[i] %= 10;
}
while (c[len] > 0) {
if (c[len] > 10) {
c[len + 1] = c[len] / 10;
c[len] %= 10;
}
len++;
}
while (c[len - 1] == 0 && len > 1)
{
len--;
}
string ans;
for (int i = len - 1; i >= 0; i--) {
ans += c[i] + '0';
}
return ans;
}
int mian() {
cin >> s1 >> b;
string ans = fun_mul(s1, b);
cout << ans;
return 0;
}