• 高精度


    模板

    搬自这位神仙的博客

    /*高精板子*/
    struct bign{
    	int len,s[30010];
    	bign(){
    		memset(s,0,sizeof(s));
    		len=1;
    	}
    	bign(int num){*this=num;}
    	bign(const char *num){*this=num;}
    	
    	bign operator = (const int num){
    		char s[30010];
    		sprintf(s,"%d",num);
    		*this=s;
    		return *this;
    	}
    	void clean(){
    		while(len>1&&!s[len-1]) len--;
    	}
    	bign operator = (const char *num){
    		memset(s,0,sizeof(s));
    		len=strlen(num);
    		for(int i=0;i<len;i++){
    			if(isdigit(num[len-i-1])) s[i]=num[len-i-1]-'0';
    			else s[i]=num[len-i-1]-'A'+10;
    		}
    		clean();
    		return *this;
    	}
    	bign operator + (const bign &b) const{
    		bign c;
    		c.len=max(len,b.len);
    		for(int i=0;i<=c.len;i++){
    			c.s[i]+=s[i]+b.s[i];
    			c.s[i+1]+=c.s[i]/10;
    			c.s[i]%=10;
    		}
    		if(c.s[c.len]) c.len++;
    		c.clean();
    		return c;
    	}
    	bign operator += (const bign &b){
    		*this=*this+b;
    		return *this;
    	}
    	bign operator * (const bign &b){
    		bign c;
    		c.len=len+b.len;
    		for(int i=0;i<len;i++){
    			for(int j=0;j<b.len;j++){
    				c.s[i+j]+=s[i]*b.s[j];
    			}
    		}
    		for(int i=0;i<c.len;i++){
    			c.s[i+1]+=c.s[i]/10;
    			c.s[i]%=10;
    		}
    		c.clean();
    		return c;
    	}
    	bign operator *= (const bign &b){
    		*this =*this*b;
    		return *this;
    	}
    	bign operator - (const bign &b){
    		bign c;
    		c.len=0;
    		for(int i=0,g=0;i<len;i++){
    			int x=s[i]-g;
    			if(i<b.len) x-=b.s[i];
    			if(x>=0) g=0;
    			else{g=1; x+=10;}
    			c.s[c.len++]=x;
    		}
    		c.clean();
    		return c;
    	}
    	bign operator -= (const bign &b){
    		*this=*this-b;
    		return *this;
    	}
    	bign operator / (const int &b){
    		int f=0;
    		bign c;
    		for(int i=len-1;i>=0;i--){
    			f=f*10+s[i];
    			c.s[i]=f/b;
    			f%=b;
    		}
    		c.len=len;
    		c.clean();
    		return c;
    	}
    	bign operator / (const bign &b){
    		bign c,f=0;
    		for(int i=len-1;i>=0;i--){
    			f=f*10;
    			f.s[0]=s[i];
    			while(f>b||f==b){
    				f-=b;
    				c.s[i]++;
    			}
    		}
    		c.len=len;
    		c.clean();
    		return c;
    	}
    	bign operator /= (const bign &b){
    		*this=*this/b;
    		return *this;
    	}
    	bign operator % (const bign &b){
    		bign r=*this/b;
    		r=*this-r*b;
    		return r;
    	}
    	bign operator %= (const bign &b){
    		*this=*this%b;
    		return *this;
    	}
    	bool operator < (const bign &b){
    		if(len!=b.len) return len<b.len;
    		for(int i=len-1;i>=0;i--){
    			if(s[i]!=b.s[i]) return s[i]<b.s[i];
    		}
    		return false;
    	}
    	bool operator > (const bign &b){
    		if(len!=b.len) return len>b.len;
    		for(int i=len-1;i>=0;i--){
    			if(s[i]!=b.s[i]) return s[i]>b.s[i];
    		}
    		return false;
    	}
    	bool operator == (const bign &b){
    		return !(*this>b)&&!(*this<b);
    	}
    	string str() const{
    		string res="";
    		for(int =0;i<len;i++){
    			if(s[i]<10) res=char(s[i]+'0')+res;
    			else res=char(s[i]+'A'-10)+res;
    		}
    		return res;
    	}
    }a,b,c;
    

    例题

    题目 不附例题我自己可能都不知道该怎么用

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<algorithm>
    #define maxn 1010
    using namespace std;
    
    /*高精板子*/
    struct bign{
    	int len,s[30010];
    	bign(){
    		memset(s,0,sizeof(s));
    		len=1;
    	}
    	bign(int num){*this=num;}
    	bign(const char *num){*this=num;}
    	
    	bign operator = (const int num){
    		char s[30010];
    		sprintf(s,"%d",num);
    		*this=s;
    		return *this;
    	}
    	void clean(){
    		while(len>1&&!s[len-1]) len--;
    	}
    	bign operator = (const char *num){
    		memset(s,0,sizeof(s));
    		len=strlen(num);
    		for(int i=0;i<len;i++){
    			if(isdigit(num[len-i-1])) s[i]=num[len-i-1]-'0';
    			else s[i]=num[len-i-1]-'A'+10;
    		}
    		clean();
    		return *this;
    	}
    	bign operator + (const bign &b) const{
    		bign c;
    		c.len=max(len,b.len);
    		for(int i=0;i<=c.len;i++){
    			c.s[i]+=s[i]+b.s[i];
    			c.s[i+1]+=c.s[i]/10;
    			c.s[i]%=10;
    		}
    		if(c.s[c.len]) c.len++;
    		c.clean();
    		return c;
    	}
    	bign operator += (const bign &b){
    		*this=*this+b;
    		return *this;
    	}
    	bign operator * (const bign &b){
    		bign c;
    		c.len=len+b.len;
    		for(int i=0;i<len;i++){
    			for(int j=0;j<b.len;j++){
    				c.s[i+j]+=s[i]*b.s[j];
    			}
    		}
    		for(int i=0;i<c.len;i++){
    			c.s[i+1]+=c.s[i]/10;
    			c.s[i]%=10;
    		}
    		c.clean();
    		return c;
    	}
    	bign operator *= (const bign &b){
    		*this =*this*b;
    		return *this;
    	}
    	bign operator - (const bign &b){
    		bign c;
    		c.len=0;
    		for(int i=0,g=0;i<len;i++){
    			int x=s[i]-g;
    			if(i<b.len) x-=b.s[i];
    			if(x>=0) g=0;
    			else{g=1; x+=10;}
    			c.s[c.len++]=x;
    		}
    		c.clean();
    		return c;
    	}
    	bign operator -= (const bign &b){
    		*this=*this-b;
    		return *this;
    	}
    	bign operator / (const int &b){
    		int f=0;
    		bign c;
    		for(int i=len-1;i>=0;i--){
    			f=f*10+s[i];
    			c.s[i]=f/b;
    			f%=b;
    		}
    		c.len=len;
    		c.clean();
    		return c;
    	}
    	bign operator / (const bign &b){
    		bign c,f=0;
    		for(int i=len-1;i>=0;i--){
    			f=f*10;
    			f.s[0]=s[i];
    			while(f>b||f==b){
    				f-=b;
    				c.s[i]++;
    			}
    		}
    		c.len=len;
    		c.clean();
    		return c;
    	}
    	bign operator /= (const bign &b){
    		*this=*this/b;
    		return *this;
    	}
    	bign operator % (const bign &b){
    		bign r=*this/b;
    		r=*this-r*b;
    		return r;
    	}
    	bign operator %= (const bign &b){
    		*this=*this%b;
    		return *this;
    	}
    	bool operator < (const bign &b){
    		if(len!=b.len) return len<b.len;
    		for(int i=len-1;i>=0;i--){
    			if(s[i]!=b.s[i]) return s[i]<b.s[i];
    		}
    		return false;
    	}
    	bool operator > (const bign &b){
    		if(len!=b.len) return len>b.len;
    		for(int i=len-1;i>=0;i--){
    			if(s[i]!=b.s[i]) return s[i]>b.s[i];
    		}
    		return false;
    	}
    	bool operator == (const bign &b){
    		return !(*this>b)&&!(*this<b);
    	}
    	string str() const{
    		string res="";
    		for(int i=0;i<len;i++){
    			if(s[i]<10) res=char(s[i]+'0')+res;
    			else res=char(s[i]+'A'-10)+res;
    		}
    		return res;
    	}
    }a,b,c;
    
    int n,ka,kb;
    unsigned long long ans,cnt,l=1;
    struct chen{
    	int a;
    	int b;
    	bool friend operator < (chen x,chen y){
    		return (x.a*x.b)<(y.a*y.b);
    	}
    }peo[maxn];
    
    int main(){
    	cin>>n;
    	cin>>ka>>kb;
    	peo[0].a=ka,peo[0].b=kb;
    	for(int i=1;i<=n;i++) cin>>peo[i].a>>peo[i].b;
    	sort(peo+1,peo+n+1);
    //	for(int i=0;i<=n;i++){
    //		cnt=l/peo[i].b;
    //		l=l*peo[i].a;
    //		ans=max(ans,cnt);
    //	}
    	bign m=peo[0].a,ans=0;
    	for(int i=1;i<=n;i++){
    		bign tmp=(m/peo[i].b);
    		if(tmp>ans) ans=tmp;
    		m*=bign(peo[i].a);
    	}
    	cout<<ans.str()<<endl;
    	return 0;
    } 
    
  • 相关阅读:
    iOS 适配iPhoneX上tableHeaderView发生了高度拉伸、UI出现的空白间距
    无线加密WEP、WPA、WPA2及TKIP、AES
    字符替换操作
    jQuery版本升级问题汇总
    ipv6服务器及环境搭建
    git删除某次提交操作
    五种IO模型
    jQuery1.6以上attr改用prop
    线程创建pthread_create用法(转)
    网络字节序与主机字节序
  • 原文地址:https://www.cnblogs.com/DReamLion/p/14501008.html
Copyright © 2020-2023  润新知