高精度加减乘
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 20000;
string str1;
string str2;
int a[maxn], b[maxn], c[maxn];
int lena, lenb, lenc, num;
void init(string s, int t[])
{
for (int i = 0, j = s.size(); i < s.size(); i++, j--)
{
t[j] = s[i] - '0';
}
}
void highadd()//高精度加法
{
init(str1, a);
init(str2, b);
lenc = max(lena, lenb) + 1;
for (int i = 1; i <= lenc + 1; i++)
{
c[i] = a[i] + b[i];
}
for (int i = 1; i <= lenc + 1; i++)
{
if (c[i] > 9)
c[i + 1] += (c[i] / 10), c[i] %= 10;
}
while (c[lenc] == 0 && lenc > 1)
lenc--;
for (int i = lenc; i >= 1; i--)
cout << c[i];
}
void highsub()//高精度减法
{
if (lena < lenb || lena == lenb && str1 < str2)
{
swap(str1, str2);
swap(lena, lenb);
cout << "-";
}
init(str1, a);
init(str2, b);
lenc = max(lena, lenb);
for (int i = 1; i <= lenc; i++)
{
c[i] = a[i] - b[i];
}
for (int i = 1; i <= lenc; i++)
{
if (c[i] < 0)
c[i] += 10, c[i + 1] -= 1;
}
while (c[lenc] == 0 && lenc > 1)
lenc--;
for (int i = lenc; i >= 1; i--)
cout << c[i];
}
void highmul()//高精度乘法
{
init(str1, a);
init(str2, b);
lenc = lena + lenb;
for (int i = 1; i <= lena; i++)
for (int j = 1; j <= lenb; j++)
c[i + j - 1] += a[i] * b[j];
for (int i = 1; i <= lenc; i++)
if (c[i] > 9)
c[i + 1] += (c[i] / 10), c[i] %= 10;
while (c[lenc] == 0 && lenc > 1)
lenc--;
for (int i = lenc; i >= 1; i--)
cout << c[i];
}
int main()
{
cin >> str1;
cin >> str2;
lena = str1.size();
lenb = str2.size();
//highadd();
//highsub();
//highmul();
}
高精度除法(高精除低精)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 20000;
string str1;
string str2;
int a[maxn], c[maxn];
int lena, lenc, num;
void highdiv()//高精除低精
{
init(str1, a);
ll sum = 0;
lenc = lena;
for (int i = lena; i >= 1; i--)
{
sum = sum * 10 + a[i];
c[i] = sum / num;
sum %= num;
}
while (c[lenc] == 0 && lenc > 1)
lenc--;
for (int i = lenc; i >= 1; i--)
cout << c[i];
}
int main()
{
cin >> str1;
cin >> num;
lena = str1.size();
highdiv();
}