大数相加减

这篇博客介绍了如何使用C++实现高精度大数的相加、相减操作。通过vector容器存储倒序的大数,利用循环和进位原理进行计算,并提供了一个比较函数用于判断两个大数的大小。此外,还提供了减法操作,处理了借位的情况并移除多余的前导零。
摘要由CSDN通过智能技术生成

高精度大数相加减

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值