高精度模板1.0

来源:互联网 发布:nginx tomcat集群配置 编辑:程序博客网 时间:2024/05/29 09:27

注意:本版本的高精度模板只支持整数的输入输出,加法,减法(大数减小数),大小比较。

#include<cstdio> #include<iostream> #include<vector> #include<sstream> #include<cstring> using namespace std; struct bigint{     static const int base=100000000;     static const int width=8;     vector<int>s;     bigint (long long num=0){*this=num;}     bigint operator = (long long num){         s.clear();         do{             s.push_back(num%base);             num/=base;         }while(num>0);         return *this;     }     bigint operator = (const string& str){         s.clear();         int x,len=(str.length()-1)/width+1;         for(int i=0;i<len;i++){             int end=str.length()-i*width;             int start=max(0,end-width);             sscanf(str.substr(start,end-start).c_str(),"%d",&x);             s.push_back(x);         }         return *this;     }     bigint operator + (const bigint& b) const{         bigint c;         c.s.clear();         for(int i=0,g=0;;i++){             if(g==0&&i>=s.size()&&i>=b.s.size())break;             int x=g;             if(i<s.size())x+=s[i];             if(i<b.s.size())x+=b.s[i];             c.s.push_back(x%base);             g=x/base;         }         return c;     }     bigint operator - (const bigint& b) const{         bigint c;         c.s.clear();         for(int i=0,g=0;;i++){             if(g==0&&i>=s.size())break;             int x=g;             if(i<s.size())x+=s[i];             if(i<b.s.size())x-=b.s[i];             if(x<0)x+=base,g=-1;             else g=0;             c.s.push_back(x);         }         return c;     }     bool operator < (const bigint&b) const{         if(s.size()!=b.s.size())return s.size()<b.s.size();         for(int i=s.size()-1;i>=0;i--)             if(s[i]!=b.s[i])return s[i]<b.s[i];         return false;     }     bool operator > (const bigint&b) const{return b<*this;}     bool operator <= (const bigint&b) const{return !(b<*this);}     bool operator >= (const bigint&b) const{return !(*this>b);}     bool operator != (const bigint&b) const{return b<*this|| *this<b;}     bool operator == (const bigint&b) const{return !(b<*this)&&!(*this<b);} }; ostream& operator << (ostream &out,const bigint& x){     out<<x.s.back();     for(int i=x.s.size()-2;i>=0;i--){         char buf[20];         sprintf(buf,"%08d",x.s[i]);         for(int j=0;j<strlen(buf);j++)out<<buf[j];         }     return out; } istream& operator >> (istream &in,bigint&x){     string s;     if(!(in>>s))return in;     x=s;     return in; } int main(){     bigint a,b; }


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一个门牙长歪了怎么办 儿童牙齿长歪了怎么办 孩子牙齿长歪了怎么办 宝宝门牙长歪了怎么办 一颗牙齿挤歪了怎么办 后槽牙掉了一块怎么办 最里面的牙掉了怎么办 成年了牙齿掉了怎么办 我的门牙豁牙子怎么办 小孩牙齿长得稀怎么办 后槽牙掉了一颗怎么办 前门牙掉了一颗怎么办 牙齿黄怎么办小苏打美白牙齿 1岁宝宝牙齿发黄怎么办 宝宝一岁牙齿黄怎么办 宝宝出的牙黄怎么办 我的牙齿很黄怎么办 小孩换的牙发黄怎么办 换牙后牙齿变黄怎么办 抽烟让牙齿变黄怎么办 抽烟把牙齿抽黄了怎么办 牙齿抽烟有黑色污渍怎么办 抽烟抽的牙黄了怎么办 宝宝换牙长歪了怎么办 30岁地包天怎么办 2岁宝宝地包天怎么办 23岁牙齿天包地怎么办 婴儿嘴巴天包地怎么办 天包地怎么办带保持器 宝宝牙齿地包天怎么办 狗狗牙齿断了怎么办 牙齿有窟窿还疼怎么办 龋洞里面很臭怎么办 大牙掉了一半疼怎么办 牙侧面掉了一半怎么办 后大牙掉了一半怎么办 9岁牙龈上长牙齿怎么办 2颗门牙中间黑了怎么办 牙表面有个小洞怎么办 两岁宝宝有龋齿怎么办 3岁宝宝门牙龋齿怎么办