• 高精度“-”算法


    一、高精度"-"算法

    1.1 编写高精度"-",记住下面的内容,代码也就游刃有余了!

    (1) 首先采用高精度"+"同样的处理方式来存储大整数

    (2) 其次存储完,考虑如何运算?

    二、高精度"-"算法的核心

    2.1 大整数存储

    • 无论是编写'+''-''*''/'哪一个,必须保证大整数的存储格式相同,因为很多时候不仅仅有一个符号的运算。

    2.2 减法运算的本质

    • 大整数相减:C=A3A2A1A0-B2B1B0,要分两种情况考虑,如果Ai-Bi-t够减,则最终的位数为Ai-Bi-t,如果不够减,最终的位数则为Ai-Bi-t+10,实际上就是(t+10)%10的两种情况。

    2.3 另外我们要知道

    (1) 学会判断处在数组中的两个大整数的大小,一般位数不同,长度更长的那个会更大些,如果位数相同,则从最高位比较,也就是数组的最后一位。

    (2) 如果A大于等于B——>直接算,否则——>-(B-A)。

    (3) 可能会出现前导零的情况,去除!

    (4) 这里处理的是两个正整数,如果是负整数,一定可以转换位|A|+|B|或者|A|-|B|。

    三、高精度"-"的代码模板

    """
    bool cmp(vector<int> &A,vector<int> &B)//判断A是否大于等于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;
    }
    """
    }
    // C = A - B, 满足A >= B, A >= 0, B >= 0
    vector<int> sub(vector<int> &A, vector<int> &B)
    {
        vector<int> C;
        for (int i = 0, t = 0; i < A.size(); i ++ )
        {
            t = A[i] - t;
            if (i < B.size()) t -= B[i];
            C.push_back((t + 10) % 10);//分两种情况考虑,如果Ai-Bi-t够减,则最终的位数为Ai-Bi-t,如果不够减,最终的位数则为Ai-Bi-t+10
            if (t < 0) t = 1;
            else t = 0;
        }
    
        while (C.size() > 1 && C.back() == 0) C.pop_back();//去掉前导零
        return C;
    }
    

    查看更多

  • 相关阅读:
    zoj2132-The Most Frequent Number
    ant-design getFieldDecorator 无法获取自定义组件的值
    ant-design-pro Login 组件 实现 rules 验证
    js 终止 forEach 循环
    js 终止 for 循环
    vue打包后出现一些map文件的解决方法
    ant font 本地化
    react 设置代理(proxy) 实现跨域请求
    ES6 async 与 await 实战
    {...formItemLayout} 标签布局
  • 原文地址:https://www.cnblogs.com/lastk/p/12443379.html
Copyright © 2020-2023  润新知