当前位置:主页 > 查看内容

C++实现 高精度 加减乘除

发布时间:2021-07-02 00:00| 位朋友查看

简介:高精度加法 //加法大整数a大整数b vector int add ( vector int a , vector int b ) { int temp 0 ; vector int res ; for ( int i 0 ; i a . size ( ) || i b . size ( ) ; i ) { if ( i a . size ( ) ) temp a [ i ] ; if ( i b . size ( ) ) temp b [ i ]……

高精度加法

//加法				大整数a			大整数b
vector<int> add(vector<int> &a, vector<int> &b) {
    int temp = 0;
    vector<int> res;
    for (int i = 0; i < a.size() || i < b.size(); ++i) {
        if (i < a.size())temp += a[i];
        if (i < b.size())temp += b[i];
        res.push_back(temp % 10);
        temp /= 10;
    }
    //最后一个进位
    if (temp)res.push_back(temp);
    return res;
}

高精度减法

//判断a,b大小
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;
}
//减法				大整数a		大整数b
vector<int> sub(vector<int> &a, vector<int> &b) {
    if (!cmp(a, b)) {
        cout << "-";
        return sub(b, a);
    }
    vector<int> res;
    int temp = 0;
    for (int i = 0; i < a.size(); ++i) {
        if (i < b.size())temp += b[i];
        temp = a[i] - temp;
        res.push_back((temp + 10) % 10);
        if (temp < 0)temp = 1;
        else temp = 0;
    }
    //去除前导零
    while (res.size() > 1 && !res.back())res.pop_back();
    return res;
}

高精度乘法

//乘法  			  大整数a		 整数b
vector<int> mul(vector<int> &a, int b) {
    int temp = 0;
    vector<int> res;
    for (int i = 0; i < a.size() || temp; ++i) {
        if (i < a.size())
            temp += a[i] * b;
        res.push_back(temp % 10);
        temp /= 10;
    }
    //去除前导零
    while (res.back() == 0 && res.size() > 1)res.pop_back();
    return res;
}

高精度除法

//除法			大整数a		整数b		余数r
vector<int> div(vector<int> &a, int b, int &r) {
    int temp = 0;
    vector<int> res;
    //倒着运算 
    for (int i = a.size() - 1; i >= 0; --i) {
        temp *= 10;
        temp += a[i];
        res.push_back(temp / b);
        temp %= b;
    }
    //运算后反转
    reverse(res.begin(), res.end());
    //去除前导零
    while (res.back() == 0 && res.size() > 1)res.pop_back();
    r = temp;
    return res;
}
;原文链接:https://blog.csdn.net/qq_46039856/article/details/115605408
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐