高精度计算模板
作者:
开心小子
,
2019-09-03 16:52:14
,
所有人可见
,
阅读 3019
在vector中的高精度存储中是倒序存储的例如1234 在vector中 p[0]=4,p[1]=3,p[2]=2,p[3]=1;
vector中的push_back()的存储顺序也是按下表的0、1、……来存的,而不是像栈那样存
高精度乘
vector<int > mul(vector<int > a,int b )
{ //乘法要由低位向高位乘,而又要考虑vector的存储顺序,低位在前,高位在后
vector<int > c;
int t=0;
for( int i = 0; i < a.size() ; i ++ )
{
t+=a[i]*b;
c.push_back(t%10);
t/=10;
}
while(t)
{
c.push_back(t%10);
t/=10;
}
return c;
}
高精度除法
vector<int > div(vector<int > a,int b)
{
vector<int > c;
bool is_first=true;//在由高位开始除时,当遇到第一个不为0的位置才存到临时高精度vector中
int t=0;
for(int i = a.size()-1 ; i >= 0 ; i-- )
{
t=t*10+a[i];
int x=t/b;
if(!is_first||x)
{
is_first=false;
c.push_back(x);
}
t%=b;
}
reverse(c.begin(),c.end());//这里要翻转的原因是,c存储的顺序是将高位的除数存储到了前面,而高精度的存储高位应该存储到后边的。
return c;
}
两个高精度进行比较
vector<int > max_vec(vector<int > a,vector<int > b)
{
if(a.size()>b.size() ) return a;
if(a.size()<b.size() ) return b;
if(vector<int > (a.rbegin(),a.rend())>vector< int > (b.rbegin(), b.rend()) )
return a;//当长度相同时,两个高精度由高位到低位依次进行比较
return b;
}
还有高精除高精
建议加上高精度压位,高精度乘高精度
好的近期更新嘻嘻
求更新hh