• 20.高精度的压位


    加法可以压9位

    乘法一般压4位,不压5位是因为会爆int

    压8位的意思是:

      将高精度整数转化成数组时,数组中的每个数存储8位。这样数组的长度会缩小到原来的1/8。

    压8位的具体实现:

      不压位的话,数组里每一个数存0~9。压8位就是每个数存0~99999999。这样数组长度会缩小到八分之一。

    压位主要是省空间,时间效率略微加快

    压位的本质就是不再以10进制来存

    每次以1000000000进制来存

    下面的代码是高精度加法压9位

    题目同https://www.cnblogs.com/fx1998/p/12815214.html

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 const int base = 1000000000;
     4 vector<int> add(vector<int> &A, vector<int> &B) {
     5     vector<int> C;
     6     int t = 0;
     7     for (int i = 0; i < A.size() || i < B.size(); i++) {
     8         if (i < A.size()) {
     9             t += A[i];
    10         }
    11         if (i < B.size()) {
    12             t += B[i];
    13         }
    14         C.push_back(t % base);
    15         t /= base;
    16     }
    17     if (t) {
    18         C.push_back(t);
    19     }
    20     return C;
    21 }
    22 int main() {
    23     string a, b;
    24     cin >> a >> b;
    25     vector<int> A, B, C;
    26     for (int i = a.length() - 1, s = 0, j = 0, t = 1; i >= 0; i--) {
    27         //s是和,j是当前已经压了几位,t是每次乘的10
    28         s += (a[i] - '0') * t;
    29         j++;
    30         t *= 10;
    31         if (j == 9 || i == 0) {
    32             A.push_back(s);
    33             s = 0;
    34             j = 0;
    35             t = 1;
    36         }
    37     }
    38     for (int i = b.length() - 1, s = 0, j = 0, t = 1; i >= 0; i--) {
    39         s += (b[i] - '0') * t;
    40         j++;
    41         t *= 10;
    42         if (j == 9 || i == 0) {
    43             B.push_back(s);
    44             s = 0;
    45             j = 0;
    46             t = 1;
    47         }
    48     }
    49     C = add(A, B);
    50     cout << C.back();
    51     for (int i = C.size() - 2; i >= 0; i--) {
    52         //printf("%09d", C[i]);
    53         cout << setw(9) << setfill('0') << C[i];
    54     }
    55     return 0;
    56 }
  • 相关阅读:
    软件测试自学建议
    软件测试-整理的自学资料
    软件测试自动化…python学习到什么程度?代码好不好学!
    软件测试为什么需要学习Linux的知识?Linux学到什么程度?-log5
    软件测试-Svn服务器搭建全过程-基于Centos6.7-64bit
    迁移虚拟机打开快照报错:CPUID错误
    软件测试-培训的套路-log3
    jaxb
    Java Sax解析
    【IOS】应用之间调用
  • 原文地址:https://www.cnblogs.com/fx1998/p/13235988.html
Copyright © 2020-2023  润新知