高精度加法
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e5+5,INF=0x3f3f3f3f;
int main()
{
vector<int> a;vector<int> b,c;
string f,g;
cin>>f>>g;
for(int i=f.size()-1;i>=0;--i)
{
int x=f[i]-'0';
a.push_back(x);
}
for(int i=g.size()-1;i>=0;--i)
{
int x=g[i]-'0';
b.push_back(x);
}
int n=max(a.size(),b.size());
int t=0;
for(int i=0;i<a.size()||i<b.size();++i)
{
if(i<a.size())t+=a[i];
if(i<b.size())t+=b[i];
c.push_back(t%10);
t=t/10;
}
if(t!=0)
{
c.push_back(1);
n++;
}
for(int i=n-1;i>=0;--i)
{
cout<<c[i];
}
return 0;
}
高精度减法
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#include <limits.h>
using namespace std;
const int N = 1e5 + 5, INF = 0x3f3f3f3f;
bool cmp(vector<int> n, vector<int>m)
{
if (n.size() != m.size())return n.size() > m.size();
for (int i = n.size() - 1; i >= 0; --i)
if (n[i] != m[i])return n[i] > m[i];
return true;
}
vector<int> sub(vector<int>& a, vector<int>& b) {
vector<int>c; int t = 0;
for (int i = 0; i < a.size(); ++i)
{
t = a[i] - t;
if (i<b.size())t -= b[i];
c.push_back((t + 10) % 10);
if (t < 0)t = 1;
else t = 0;
}
while (c.size() > 1 && c.back() == 0)c.pop_back();
return c;
}
int main()
{
vector<int> a, b, C;
string A, B;
cin >> A >> B;
for (int i = A.size() - 1; i >= 0; --i) {
a.push_back(A[i] - '0');
}
for (int i = B.size() - 1; i >= 0; --i)b.push_back(B[i] - '0');
if (cmp(a, b))
C = sub(a, b);
else {
C = sub(b, a);
printf("-");
}
for (int i = C.size() - 1; i >= 0; --i) {
cout << C[i];
}
return 0;
}
高精度乘法
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#include <limits.h>
using namespace std;
const int N = 1e5 + 5, INF = 0x3f3f3f3f;
vector<int> cheng(vector<int>& A, int& B) {
vector<int>c; long long t = 0;
for (int i = 0; i < A.size() || t; ++i)
{
if(i<A.size())t += A[i] * B;
c.push_back(t % 10);
t = t / 10;
}
return c;
}
int main()
{
vector<int> a;
string A;
int b;
cin >> A >> b;
if (b == 0)
{
cout << '0';
return 0;
}
for (int i = A.size() - 1; i >= 0; --i) {
a.push_back(A[i] - '0');
}
auto c = cheng(a, b);
for (int i = c.size() - 1; i >= 0; --i) {
cout << c[i];
}
return 0;
}
高精度除法
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
#include <limits.h>
using namespace std;
const int N=1e5+5,INF=0x3f3f3f3f;int t=0;
vector<int> cu(vector<int>&A,int&B){
vector<int>c;
for(int i=A.size()-1;i>=0;--i)
{
t=A[i]+t*10;
c.push_back(t/B);
t=t%B;
}
reverse(c.begin(),c.end());
while(c.size()>1&&c.back()==0)c.pop_back();
return c;
}
int main()
{
vector<int> a;
string A;int b;
cin>>A>>b;
for(int i=A.size()-1;i>=0;--i){
a.push_back(A[i]-'0');
}
auto c=cu(a,b);
for(int i=c.size()-1;i>=0;--i){
cout<<c[i];
}
cout<<"\n"<<t;
return 0;
}