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

    题意:给你两个整数a,b,计算a+b 的和是多少?(a>0,b>0)

    题解:模拟加法

    没压位

    /***
        高精度加法:模拟计算
        1.大整数存储:    A3A2A1A0
        A < 10 A:0~9
        len(A) < 10 A:0~999999999
    ***/
    #include <iostream>
    #include <vector>
    #include <cstdio>
    using namespace std;
    const int N = 1e6 + 7;
    
    // C = A + B;
    vector<int>add(vector<int> &A, vector<int>&B)
    {
        vector<int> C;
        int t = 0;  //进位
        for(int i = 0; i < A.size() || i < B.size(); i++)
        {
            if(i < A.size()) t += A[i];
            if(i < B.size()) t += B[i];
            C.push_back(t % 10);
            t /= 10;
        }
        if(t) C.push_back(1);  //是否进位
        return C;
    }
    int main()
    {
        string a,b;
        vector<int> A,B;
    
        cin>>a>>b;
        for(int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0'); // A = [6 , 5, 4, 3, 2, 1]
        for(int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0'); // B = [6 , 5, .........1]
    
        vector<int> C = add(A, B);
        for(int i = C.size() - 1; i >= 0; i--) printf("%d",C[i]);
        return 0;
    }
    

    压位

    #include <iostream>
    #include <vector>
    #include <cstdio>
    using namespace std;
    
    const int base = 1e9;   //压9位
    
    vector<int> add(vector<int> &A, vector<int> &B)
    {
        vector<int> C;
        int t = 0;
        for (int i = 0; i < A.size(); i ++ )
        {
            if(i < A.size()) t += A[i];
            if(i < B.size()) t += B[i];
            C.push_back(t % base);
            t /= base;
        }
    
        if (t) C.push_back(t);
        return C;
    }
    
    int main()
    {
        string a, b;
        vector<int> A, B;
        cin >> a >> b;
    
        for (int i = a.size() - 1, s = 0, j = 0, t = 1; i >= 0; i -- )
        {
            s += (a[i] - '0') * t;
            j ++, t *= 10;
            if (j == 9 || i == 0)
            {
                A.push_back(s);
                s = j = 0;
                t = 1;
            }
        }
        for (int i = b.size() - 1, s = 0, j = 0, t = 1; i >= 0; i -- )
        {
            s += (b[i] - '0') * t;
            j ++, t *= 10;
            if (j == 9 || i == 0)
            {
                B.push_back(s);
                s = j = 0;
                t = 1;
            }
        }
    
        vector<int> C = add(A, B);
    
        cout << C.back();
        for (int i = C.size() - 2; i >= 0; i -- ) printf("%09d", C[i]);   //前导 0 不输出
        cout << endl;
    
        return 0;
    }
    

      

  • 相关阅读:
    zoj 3644 Kitty's Game
    Planets
    hdoj 2571 命运
    (理论篇)IOC概述和Unity的使用
    重温设计模式之单例模式
    重温设计模式之观察者
    重温设计模式之装饰者
    (理论篇)PetShop全概述
    (理论篇)petshop中缓存运用之我见
    (理论篇)cookie,session,viewstate,cache
  • 原文地址:https://www.cnblogs.com/Edviv/p/12252958.html
Copyright © 2011-2022 走看看