zoukankan      html  css  js  c++  java
  • 高精度模板(从洛谷题解中骗来的

    乘法通用模板:

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    #include <vector>
    #include <map>
    #include <set>
    #include <queue>
    #include <list>
    #include <iterator>
    #include <cmath>
    using namespace std;
    
    #define lson (l , mid , rt << 1)
    #define rson (mid + 1 , r , rt << 1 | 1)
    #define debug(x) cerr << #x << " = " << x << "
    ";
    #define pb push_back
    #define pq priority_queue
    
    #define Pll pair<ll,ll>
    #define Pii pair<int,int>
    
    #define fi first
    #define se second
    
    #define OKC ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
    #define FT(A,B,C) for(int A=B;A <= C;A++)  //用来压行
    
    typedef long long ll;
    typedef unsigned long long ull;
    
    /*-----------------show time----------------*/
    
    
    using namespace std;
    const int N=1005;
    struct int_l{
        int data[N];
        int_l(){//结构体的初始化 这很关键 
            memset(data,0,sizeof(data));
            data[0]=1;    
        }
        int_l(int x){//将低精数转化为高精数 
            memset(data,0,sizeof(data));
            data[0]=1;
            int i=1;
            while(x){
                data[i++]=x%10;
                x/=10;
            }
            data[0]=--i;
        }
        int_l operator *(const int &x){//重载乘号 * 注意只能高精*低精 不能 低精*高精
            int_l a; 
            int len;
            a.data[0]=data[0];
            FT(i,1,data[0]) a.data[i]=data[i]*x;
            for(int i=1;i<=a.data[0] || a.data[i];len=++i){ a.data[i+1]+=a.data[i]/10; a.data[i]%=10;}
            a.data[len]? a.data[0]=len : a.data[0]=--len;
            return a;
        }
        int_l operator +(const int_l &x){//重载加号 + 
            int_l a;
            a.data[0]=max(data[0],x.data[0]);
            FT(i,1,a.data[0]) a.data[i]=data[i]+x.data[i];
            FT(i,1,a.data[0]){ a.data[i+1]+=a.data[i]/10; a.data[i]%=10;}
            a.data[a.data[0]+1]? a.data[0]++ : a.data[0];
            return a;
        }
    
    };
    ostream& operator << (ostream& out, const int_l &x){//这行比较高深 重载输出流
    //嫌麻烦的 可以用普通的方法输出也行 
        FT(i,1,x.data[0]) out<<x.data[x.data[0]-i+1];
        return out;
    }
    int main(){
        int n;
        OKC;
        cin>>n;
        int_l ans(0),a(1);
        for(int i=1; i<=n; i++)
        {
            a = a*i;
            ans =ans +  a;
        }
        cout<<ans<<endl;
        return 0;
    }
    高精度乘法
  • 相关阅读:
    狗蛋带仨妞【Beta】Scrum meeting 1
    实验九 团队作业5:团队项目编码与Alpha冲刺
    狗蛋带仨妞【Alpha】Scrum meeting 7
    狗蛋带仨妞【Alpha】Scrum meeting 6
    狗蛋带仨妞【Alpha】Scrum meeting 5
    狗蛋带仨妞 【Alpha】Scrum meeting 1-4
    Rosetta中准备配体的参数文件
    pymol安装
    chemshell的creation之后
    关于KIE的一点认识
  • 原文地址:https://www.cnblogs.com/ckxkexing/p/9190893.html
Copyright © 2011-2022 走看看