• 高精板子合集(string版本)


    #include<bits/stdc++.h>
    using namespace std;
    const int N=100001;
    int a[N],b[N],c[N];
    inline string zhuan(int x){//int转化string 
        string ant="";
        while(x){
            ant=char(x%10+'0')+ant;
            x/=10;
        }
        return ant;
    }
    inline bool cmp(string x,string y){//比较两个高精string数的大小 
        int len=x.size(),ten=y.size();
        if(len!=ten){
            return len>ten;
        }
        for(int i=0;i<len;++i){
            if(x[i]!=y[i]){
                return x[i]>y[i];
            }
        }
        return true;
    }//若x>=y返回true,否则为false 
    inline string jia1(string x,int y){//高精加低精 
        //初始化 
        memset(a,0,sizeof(a));
        int len=x.size();
        //储存
        for(int i=0;i<len;++i){
            a[i]=x[len-i-1]-'0';
        }
        //操作 
        a[0]+=y;
        //进位 
        for(int i=0;i<len;++i){
            if(a[i]>9){
                a[i+1]+=a[i]/10;
                a[i]%=10;
                if(i==len-1){
                    len++;
                }
                continue;
            }
            break;
        }
        //输出 
        string ant="";
        for(int i=len-1;i>=0;--i){
            ant+=char(a[i]+'0');
        }
        return ant;
    }
    inline string jia2(string x,string y){//高精加高精 
        //初始化 
        int len=x.size(),ten=y.size();
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        int k=max(len,ten);
        //储存 
        for(int i=0;i<len;++i){
            a[i]=x[len-i-1]-'0';
        }
        for(int i=0;i<ten;++i){
            b[i]=y[ten-i-1]-'0';
        }
        //操作 
        for(int i=0;i<k;++i){ 
            c[i]=a[i]+b[i];
        }
        //进位 
        for(int i=0;i<k;++i){
            if(c[i]>9){
                c[i+1]++;
                c[i]-=10;
                if(i==k-1){
                    k++;
                }
            }
        }
        //输出
        string ant="";
        for(int i=k-1;i>=0;--i){
            ant+=char(c[i]+'0');
        }
        return ant;
    }
    //注意:此处的高精减法默认x>=y 
    inline string jian(string x,string y){//这是为高精除高精写的减法,正确的写法您需要特判x==y的情况
        //初始化 
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        int len=x.size(),ten=y.size();
        int k=max(len,ten);
        //储存 
        for(int i=0;i<len;++i){
            a[i]=(x[len-i-1]-'0');
        }
        for(int i=0;i<ten;++i){
            b[i]=(y[ten-i-1]-'0');
        }
        //操作 
        for(int i=0;i<k;++i){
            a[i]-=b[i];
        }
        //退位 
        for(int i=0;i<k;++i){
            if(a[i]<0){
                a[i+1]--;
                a[i]+=10;
            }
        }
        //消除前导零 
        while(k&&!a[k-1]){
            k--;    
        }
        //输出 
        string ant="";
        for(int i=k-1;i>=0;--i){
            ant+=char(a[i]+'0');
        }
        return ant;
    }
    inline string cheng1(string x,int y){//高精乘低精 
        //初始化 
        int len=x.size();
        memset(a,0,sizeof(a));
        //储存 
        for(int i=0;i<len;++i){
            a[i]=x[len-i-1]-'0';
        }
        //操作 
        for(int i=0;i<len;++i){
            a[i]*=y;
        }
        //进位
        for(int i=0;i<len;++i){
            if(a[i]>9){
                a[i+1]+=a[i]/10;
                a[i]%=10;
                if(i==len-1){
                    len++;
                }
            }
        }
        //消去前导零 
        while(len>1&&!a[len-1]){
            len--;
        }
        string ant="";
        for(int i=len-1;i>=0;--i){
            ant+=char(a[i]+'0');
        }
        return ant;
    }
    inline string cheng2(string x,string y){//高精乘高精 
        //初始化 
        int len=x.size(),ten=y.size();
        int k=len+ten-1;
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(c,0,sizeof(c));
        //储存 
        for(int i=0;i<len;++i){
            a[i]=(x[len-i-1]-'0');
        }
        for(int j=0;j<ten;++j){
            b[j]=(y[ten-j-1]-'0');
        }
        //操作 
        for(int i=0;i<len;++i){
            for(int j=0;j<ten;++j){
                c[i+j]+=a[i]*b[j];
            }
        }
        //进位 
        for(int i=0;i<=k;++i){
            if(c[i]>9){
                c[i+1]+=c[i]/10;
                c[i]%=10;
            }
        }
        //消去前导零 
        while(k&&!c[k]){
            k--;
        }
        //输出 
        string ant="";
        for(int i=k;i>=0;--i){
            ant+=char(c[i]+'0');
        }
        return ant;
    }
    inline string chu1(string x,int y){//高精除低精 
        //初始化 
        int len=x.size();
        int yu=0;
        bool flag=0;//是否有数字 
        string ans="";
        //操作 
        for(int i=0;i<len;++i){
            yu=yu*10+(x[i]-'0');
            if(flag){
                ans+=char(yu/y+'0');
                yu%=y;
                continue;
            }
            if(yu>=y){
                flag=1;
                ans+=char(yu/y+'0');
                yu%=y;
            }
        }
        //输出 
        return ans;
    }
    inline string chu2(string x,string y){//高精除高精
        //比较 
        if(!cmp(x,y)){
            return "0";
        }
        //初始化 
        int len=x.size();
        string yu="",ans="";
        bool flag=0;
        //操作 
        for(int i=0;i<len;++i){
            yu+=x[i];
         if(yu=="0"){
           yu="";
         }
    int tim=0; while(cmp(yu,y)){ yu=jian(yu,y); tim++; }
         if(flag){ ans+=char(tim+'0'); continue; } if(tim){ flag=1; ans+=char(tim+'0'); } } //输出 return ans; } inline int mo1(string x,int y){//高精模低精 //初始化 int len=x.size(); int yu=0; //操作 for(int i=0;i<len;++i){ yu=yu*10+(x[i]-'0'); yu%=y; } //输出 return yu; } inline string mo2(string x,string y){//高精模高精 //比较 if(!cmp(x,y)){ return x; } //初始化 int len=x.size(); string yu=""; //操作 for(int i=0;i<len;++i){ yu+=x[i];
         if(yu=="0"){
          yu="";
          } 
    while(cmp(yu,y)){ yu=jian(yu,y); } } //输出 return yu; } int main(){ //freopen("ask.in","r",stdin); //freopen("ask.out","w",stdout); return 0; } /** *  ┏┓   ┏┓+ + * ┏┛┻━━━┛┻┓ + + * ┃       ┃ * ┃   ━   ┃ ++ + + + * ████━████+ * ◥██◤ ◥██◤ + * ┃   ┻   ┃ * ┃       ┃ + + * ┗━┓   ┏━┛ *   ┃   ┃ + + + +Code is far away from   *   ┃   ┃ + bug with the animal protecting *   ┃    ┗━━━┓ 神兽保佑,代码无bug  *   ┃        ┣┓ *   ┃        ┏┛ *  ┗┓┓┏━┳┓┏┛ + + + + *    ┃┫┫ ┃┫┫ *    ┗┻┛ ┗┻┛+ + + + */
  • 相关阅读:
    一步步学习SPD2010--第十一章节--处理母版页(10)--重置母版页到网站定义
    pandas转numpy并打平实例
    list和numpy互相转换
    pandas转numpy
    pandas库疑难问题---2、pandas切片操作
    pandas切片操作
    pandas中的iloc和loc用法的区别
    NumPy疑难问题---1、NumPy切片操作
    numpy切片操作
    python疑难问题---13、Python切片操作
  • 原文地址:https://www.cnblogs.com/ThinkofBlank/p/10154457.html
Copyright © 2020-2023  润新知