zoukankan      html  css  js  c++  java
  • AcWing 792. 高精度减法

    https://www.acwing.com/problem/content/794/

    #include<bits/stdc++.h>
    using namespace std;
    //判断是否有a>=b  如果是 返回true   反之 返回false
    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相等  直接返回
    }
    // C=A-B
    vector<int> sub(vector<int> &A, vector<int> &B) {  //因为在下面判断过 所以A的位数大于B的位数
        vector<int> C;
        for(int i=0,t=0; i<A.size(); i++) {  //t表示是否有借位
            t=A[i]-t;  //当前位
            if(i<B.size()) t-=B[i];  //判断B有没有这一位。如果有,才会减去。如果没有 就是0 就不用减去
            C.push_back((t+10)%10);
            //如果此时t大于等于0,那么就是t本身。如果小于0,那么就返回t+10   两种情况综合,就是(t+10)%10
            if(t<0) t=1;  //如果t小于零,表示有借位
            else t=0;
        }
        //去前导0    如果只有一位,而且位0,那么就不用去掉
        while(C.size()>1&&C.back()==0)  C.pop_back();
        return C;
    }
    int main() {
        string a,b;
        //如果有负数   那么就在a和b开头判断是否为-,如果为-,需要打一个标记,存一下每个数是否为负号
        //两个数字相减 A-B   ,如果说,有可能是正负的话 那么一定可以转换为他们的绝对值相减或者绝对值相加的情况 |A|-|B|   |A|+|B|
        //总之 需要分情况讨论
        vector<int>A,B;
        cin>>a>>b;//a=123456
        for(int i=a.size()-1; i>=0; i--)  A.push_back(a[i]-'0');
        for(int i=b.size()-1; i>=0; i--)  B.push_back(b[i]-'0');
        if(cmp(A,B)) {     //先判断谁大
            auto C=sub(A,B);  //如果a大  直接算 输出
            for(int i=C.size()-1; i>=0; i--) cout<<C[i];
        } else {   //如果b大
            auto C=sub(B,A);   //颠倒一下
            cout<<"-";  //输出负号
            for(int i=C.size()-1; i>=0; i--) cout<<C[i];
        }
        return 0;
    }
  • 相关阅读:
    视图集
    子类视图
    Mixin扩展类
    GenericAPIView
    APIView
    ModelSerializer使用
    序列化和反序列化
    合并购物车
    pyplot基本绘制
    STL sort “invalid operator <”
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11757276.html
Copyright © 2011-2022 走看看