高精度大数相加减
vector容器中存储的数字都倒叙如:123为[3,2,1]
vector<int> add(vector<int>&a,vector<int>&b)
{
if(a.size()<b.size()return add(a,b);
int t=0;vector<int>c;//t为加出来多的数
for(int i=0;i<a.size();i++)
{
t+=a[i];
if(i<b.size())t+=b[i]; //保证b容器不会越界
c.push_back(t%10);
t/=10;
}
if(t)c.push_back(1); // 若t不为0,补多一个1
}
bool cmp(vector<int>& a, vector<int>& b) //判断哪一数大
{
if (a.size() != b.size())return a.size() > b.size();
for (int i = a.size() - 1; i >= 0; i--)
{
if(a[i]!=b[i])
return a[i] > b[i];
}
return true;
}
vector<int> sub(vector<int>& a, vector<int>& b)
{
vector<int>c;
if (!cmp(a, b))
{
swap(a, b);
cout << '-';
}
int t = 0;
for (int i =0; i<a.size(); i++)
{
t -= t; //t为借数
t += a[i]; //t加上长数组中的数后减去短数组的数
if (i < b.size())t -= b[i];
c.push_back((t + 10 )% 10); //得到两个数相减后的个位数
if (t < 0)t = 1; //若t小于0则需要借一位数
else t = 0;
}
int i = a.size()-1;
while (c[i] == 0 && i > 0) //取掉前置0;
{
c.pop_back(); i--;
}
return c;
}