zoukankan      html  css  js  c++  java
  • (高精度)大数乘除法 C++实现

    前言

    上一篇文章,我们实现了(高精度)大数的加减法,接下来我们一起实现下大数的乘除法,由于算法比较简单,和我们小学学的普通的四则运算法则类似。

    这里的乘除法均实现的是一个大数 乘(除)一个int型的整数。

    下面是实现代码。

    代码

    #include <iostream>
    #include <vector>
    
    using namespace std;
    //乘法
    vector<int> mul(vector<int> &A, int b)
    {
        vector<int> C;//结果数组
        int t=0;
        for(int i=0;i<A.size()||t;i++)
        {
            if(i<A.size()) t+=A[i]*b;
            C.push_back(t%10);
            t/=10;
        }
        return C;
    }
    //除法
    vector<int> div(vector<int> &A,int b,int &k)
    {
        vector<int> C;//保存商
        k=0;//保存余数
        for(int i=A.size()-1;i>=0;i--)
        {
            k=k*10+A[i];
            C.push_back(k/b);
            k%=b;
        }
        while(C.size()>=1&&C.front()==0) C.erase(C.begin());//消除前导0
        return C;
    }
    
    int main()
    {
        string a,op;
        vector<int> A;
        int b;
        cin >> a >> op >> b;
        for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
        if(op=="mul")
        {
            auto C = mul(A,b);
            cout << "积:";
            for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
        }
        if(op=="div")
        {
            int k=0;
            auto C = div(A,b,k);
            cout << "商:";
            for(auto c:C) cout << c;
            if(k!=0)
                cout << " 余: " << k <<endl;
        }
        return 0;
    }
    

    输入输出测试

    输入 #1

    99999999 mul 1234
    

    输出 #1

    积:123399998766
    

    输入 #2

    10000000000000 div 9
    

    输出 #2

    商:1111111111111 余: 1
    

    更多内容大家可以访问我的个人博客:一只大大怪

  • 相关阅读:
    2017第17周四当前工作中困境与挑战思考
    2017第17周三
    2017第17周二
    最小可行产品
    《穷查理宝典》中三条最重要的学习方法
    机场打车有感
    2017第15周五
    2017第15周四
    三条经济学原理帮你做出正确的选择
    Mac通过安装Go2Shell实现“在当前目录打开iTerm2”
  • 原文地址:https://www.cnblogs.com/cydi/p/12469349.html
Copyright © 2011-2022 走看看