zoukankan      html  css  js  c++  java
  • C++ 高精度乘法及模板

    高精度乘法解决了两数相乘得到的数大于long long 范围时的问题,这里提供的是一个大数乘一个小数(int 范围内)的模板,用vector 模拟乘法过程并存值,之后返回vector。先上模板:

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <iomanip>
    #include <sstream>
    #include <cmath>
    #include <vector>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <unordered_map>
    #include <unordered_set>
    #define lowbit(x) x & (-x)
    
    using namespace std;
    
    typedef long long ll;
    typedef pair<int, int> pii;
    
    const int mod = 1e9 + 7;
    const int inf = 0x3f3f3f3f;
    const int N = 1e6 + 50;
    
    vector<int > A;
    
    vector<int > mul(vector<int > &a, int b)
    {
        vector<int > res;
    
        int t = 0;
    
        for (int i = 0; i < a.size() || t; i ++)
        {
            if (i < a.size()) t += a[i] * b;
            res.push_back(t % 10);
            t /= 10;
        }
        while (!res.back() && res.size() > 1) res.pop_back();
        
    	return res;
    }
    
    int main()
    {
        string a;
        int b;
        cin >> a >> b;
    	
        for (int i = a.size() - 1; i >= 0; i --) A.push_back(a[i] ^ 48);
        
    	auto c = mul(A, b);
    	
        for (int i = c.size() - 1; i >= 0; i --) cout << c[i];
        cout << endl;
        return 0;
    }
    

    这里介绍的方法不同于一般的乘法过程,一般的乘法过程12 * 13,一般来说可能要一位一位的去乘然后错位相加,这里是用上面的每一位去乘下面整个的数,(12 x 3 = 26,保留6,2进位,再用(2 + 12 x 1)= 146。用这个方法来模拟乘法的过程。

  • 相关阅读:
    [转][Linux/Ubuntu] vi/vim 使用方法讲解
    [转]在Windows中安装Memcached
    memcached可视化客户端工具
    [转]C#操作Memcached帮助类
    [转]Redis和Memcache区别,优缺点对比
    [转]【转】大型高性能ASP.NET系统架构设计
    [转]浅谈命令查询职责分离(CQRS)模式
    element-UI——el-table添加序号
    xss攻击(转)
    vuex原理
  • 原文地址:https://www.cnblogs.com/Hayasaka/p/14294146.html
Copyright © 2011-2022 走看看