vector写法
高精度加法
#include<bits/stdc++.h>
using namespace std;
string a,b;
vector<int>A,B,C;
vector<int> add(vector<int>x,vector<int>y)
{
vector<int>z;
int t=0;
for(int i=0;i<x.size()||i<y.size();i++)
{
if(i<x.size())
t+=x[i];
if(i<y.size())
t+=y[i];
z.push_back(t%10);
t=t/10;
}
if(t)
z.push_back(1);
return z;
}
int main()
{
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');
C=add(A,B);
for(int i=C.size()-1;i>=0;i--)
printf("%d",C[i]);
}
高精度减法
#include<bits/stdc++.h>
using namespace std;
string a,b;
vector<int>A,B,C;
vector<int> sub(vector<int>x,vector<int>y)
{
vector<int>z;
int t=0;
for(int i=0;i<x.size();i++)
{
t=x[i]+t;
if(i<y.size())
t-=y[i];
z.push_back((t+10)%10);
if(t<0)
t=-1;
else
t=0;
}
while(z.size()>1&&z.back()==0) //去除前导0
z.pop_back();
return z;
}
int main()
{
cin>>a>>b;
//确保A>B
if(a.size()<b.size())
{
string c=b;
b=a;
a=c;
printf("-");
}
else if(a.size()==b.size())
{
if(a<b)
{
string c=b;
b=a;
a=c;
printf("-");
}
}
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');
C=sub(A,B);
for(int i=C.size()-1;i>=0;i--)
printf("%d",C[i]);
}
高精度乘法
#include<bits/stdc++.h>
using namespace std;
vector<int> A,B;
string a,b;
vector<int> mul(vector<int> x,vector<int> y)
{
vector<int> C(x.size()+y.size()+5);
for(int i=0;i<x.size();i++)
for(int j=0;j<y.size();j++)
C[i+j]+=x[i]*y[j];
int t=0;
for(int i=0;i<C.size();i++)
{
t+=C[i];
C[i]=t%10;
t/=10;
}
while(C.size()>1&&C.back()==0)
C.pop_back();
return C;
}
int main()
{
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');
vector<int> C(A.size()+B.size()+5);
C=mul(A,B);
for(int i=C.size()-1;i>=0;i--)
printf("%d",C[i]);
}