2021-11-16高精度(+-*/)

高精度加法:

vector<int> add(vector<int> &a, vector<int> &b)
{
      vector<int> c;
    int temp = 0;
    for(int i=0;  i<(int)a.size() || i<(int)b.size(); i++)
    {
        if(i <(int) a.size()) temp += a[i];
        if(i <(int)b.size()) temp += b[i];
        c.push_back(temp%10);
        temp /= 10;
    }
    if(temp) c.push_back(temp);
     reverse(c.begin(), c.end());
    return c;
}

高精度减法:

#include <bits/stdc++.h>
#define rep(x, a, b) for(int x = a; x<=b; x++)
#define pre(x, a, b) for(int x=a; x>=b; x--)
using namespace std;
bool cmp(vector<int> &a, vector<int> &b)//判断数字大小
{
    if(a.size() != b.size()) return a.size()>b.size();
    for(int i=(int)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))//判断减数和被减数的大小
    {
        printf("-");//提前输出负号
        c = sub(b, a);//交换位置再次调用
        return c;
    }
    int temp = 0;
    for(int i=0;  i<(int)a.size(); i++)
    {
        temp += a[i];
        if(i < (int)b.size()) temp -= b[i];
        c.push_back((temp+10)%10);//保证压入的数字为个位正整数
        if(temp < 0) temp = -1;
        else temp = 0;
    }
    while(c.size()>1 && c.back() == 0) c.pop_back();//去除前导零

    reverse(c.begin(), c.end());//倒置
    return c;
}

高精度乘法:

vector<int> mul(vector<int> &a,int b)
{
    vector<int> c;
    int temp = 0;
    for(int i=0;  i<(int)a.size(); i++)
    {
        temp += a[i]*b;
        c.push_back(temp%10);
        temp /= 10;
    }
    if(temp) c.push_back(temp);
    while(c.size()>1 && c.back() == 0) c.pop_back();
    reverse(c.begin(), c.end());
    return c;
}

高精度除法:

vector<int> div(vector<int> &a,int b, int &temp)
{
    vector<int> c;
     reverse(a.begin(), a.end());
    for(int i=0;  i<(int)a.size(); i++)
    {
        temp = temp*10 + a[i];//上一位的余数*10+该位数字
        c.push_back(temp/b);//除数
        temp %= b;//注意是模b取余数
    }
    reverse(c.begin(), c.end());//倒置
    while(c.size()>1 && c.back() == 0) c.pop_back();//去前缀0
    reverse(c.begin(), c.end());//倒置回去
    return c;
}

猜你喜欢

转载自blog.csdn.net/m0_54674275/article/details/121350992