乘法和之前的代码类似
//高精度乘法:高精度 * 低精度
vector<int>mul(vector<int>A,int b)
{
vector<int> ans;
int carry=0;
for(int i=0;i<A.size()||carry/*处理最后一位*/;i++)
{
if(i<A.size())
carry=carry+A[i]*b;
ans.push_back(carry%10);
carry=carry/10;
}
while(ans.size()>1&&ans.back()==0)
ans.pop_back;
return ans;
}
除法会稍微复杂一些,在纸上举一个例子结合代码更好理解
注意:之前加法减法乘法都是从最低位开始算,而除法需要从高位开始计算,为了保持和前面的一致,采用相同的储存方式,所以计算之前需要反转,计算之后也要反转。
//高精度除法:高精度 / 低精度
vector<int> div(vector<int>A,int b,int r)//r为余数
{
vector<int> ans;
int carry=0;
r=0;
for(int i=A.size()-1;i>=0;i--)//实现第一次反转
{
r=r*10+A[i];//相当于在纸上落下来对齐的操作
ans.push_back(r/b);
r=r%b;
}
reverse(ans.begin(),ans.end());//反转函数实现第二次反转
while(ans.size()>1&&ans.back()==0)
ans.pop_back;
}