加法模板
vector<int> add(vector<int> &a,vector<int> &b)
{
int t=0; vector<int> c;
for(int i=0;i<a.size()||i<=b.size();i++)
{
if(i<a.size()) t+=a[i]; //让进位加a[i]
if(i<b.size()) t+=b[i]; //让进位加b[i]
c.push_back(t%10),t/=10; //将答案填入c中 并处理进位
}
if(t) c.push_back(t); //加法位数>=a,b的位数 所以判断t是否为0
return c;
}
减法模板
bool cmp(vector<int> &a,vector<int> &b)
{
if(a.size()!=b.size()) return a.size()>b.size(); //比较a和b的位数大小
for(int i=a.size()-1;i>=0;i--) //当位数相同从高位依次比较大小
{
if(a[i]!=b[i]) return a[i]>b[i];
}
return true; //当a和b相等返回true
}
vector<int> sub(vector<int> &a,vector<int> &b)
{
int t=0; vector<int> c;
for(int i=0;i<a.size();i++)
{
t=a[i]-t; //用a[i]处理上一次的借位
if(i<b.size()) t=t-b[i]; //如果b[i]还存在用t减去b[i]
c.push_back((t+10)%10); //该步将填入c答案中借位和不借位融合一起
if(t<0) t=1; //判断是否向下一步借位
else t=0; ****
}
while(c.size()>1&&c.back()==0) c.pop_back(); //由于c的位数小于等于a,b需要去除前道0
return c;
}
乘法模板
vector<int> mul(vector<int> &a,int b)
{
vector<int> c; int t=0;
for(int i=0;i<a.size()||t;i++) //乘法位数>=a,b的位数 所以判断t是否为0加法类似
{
if(i<a.size()) t+=a[i]*b; //每一位乘b
c.push_back(t%10); //加入c中
t/=10; //改变t
}
while(c.size()>1&&c.back()==0) c.pop_back(); //去除前导0
return c;
}
除法模板
int r=0; //定义全局变量r存储余数
vector<int> div(vector<int> a,int b)
{
vector<int> c;
for(int i=a.size()-1;i>=0;i--) //正序计算
{
r=r*10+a[i];
c.push_back(r/b);
r%=b;
}
reverse(c.begin(),c.end()); //将答案倒序
while(c.size()>1&&c.back()==0) c.pop_back(); //去除前导0
return c;
}