struct BigInt{
	int size=1;
	int f=1;
	int num[MAXNUM];
	BigInt(const BigInt &x){
		memcpy(num,x.num,sizeof(num));
		size=x.size;
		f=x.f;
	}
	BigInt(string s){
		memset(num,0,sizeof(num));
		while(s[0]=='0'&&s.size()>1) s=s.substr(1);
		size=s.size();
		for(int i=0;i<size;i++){
			num[size-i-1]=s[i]-'0';
		}
	}
	BigInt(int x=0){
		memset(num,0,sizeof(num));
		if(x==0){size=1;return;}
		size=0;
		while(x){
			num[size++]=x%10;
			x/=10;
		}
	}
	void prt(bool nl=false){
		if(f==-1) cout<<'-';
		for(int i=size-1;i>=0;i--) cout<<num[i];
		if(nl) cout<<"\n";
	}
	BigInt operator+(const BigInt b)const{
		BigInt c;
		int lenc=max(size,b.size);
		int jw=0;
		for(int i=0;i<lenc;i++){
			c.num[i]=num[i]+b.num[i]+jw;
			jw=c.num[i]/10;
			c.num[i]%=10;
			//cout<<jw<<' ';
		}
		if(jw) c.num[lenc++]=1;
		c.size=lenc;
		return c;
	}
	BigInt operator-(const BigInt b)const{
		BigInt c=*this,x=b;
		if(size<b.size){
			c=b;x=*this;
			c.f=-1;
		}else if(size==b.size){
			for(int i=size-1;i>=0;i--){
				if(num[i]<b.num[i]){
					c=b;x=*this;
					c.f=-1;
					break;
				}
			}
		}
		for(int i=0;i<c.size;i++){
			if(x.num[i]>c.num[i]){ 
				c.num[i+1]-=1;
				c.num[i]+=10;
			}
			c.num[i]=c.num[i]-x.num[i];
		}
		while(c.num[c.size-1]==0&&c.size>1) c.size--;
		return c;
	}
	BigInt operator/(const int b)const{
		BigInt c;
		int r=0;
		c.size=size;
		for(int i=size-1;i>=0;i--){
			r=r*10+num[i];
			c.num[i]=r/b;
			r%=b;
		}
		while(c.num[c.size-1]==0&&c.size>1) c.size--;
		return c;
	}
	BigInt operator*(const BigInt b)const{
		BigInt c;
		int lenc=size+b.size;
		int jw=0;
		//cout<<lenc;
		for(int i=0;i<b.size;i++){
			for(int j=0;j<size;j++){
				c.num[i+j]+=b.num[i]*num[j];
			}
		}
		for(int i=0;i<lenc;i++){
			c.num[i+1]+=c.num[i]/10;
			c.num[i]%=10;
		}
		while(c.num[lenc-1]==0&&lenc>1) lenc--;
		c.size=lenc;
		return c;
	}
};

4 条评论

  • @ 2025-7-30 20:15:24
     int operator%(const int b)const{
       int r=0;
       for(int i=size-1;i>=0;i--){ 
         r=r*10+num[i]; r%=b;
       }
       return r;
    }
    
  • @ 2025-7-30 20:03:50

    独家%运算: int operator%(const int b)const{ int r=0; for(int i=size-1;i>=0;i--){ r=r*10+num[i]; r%=b; } return r; }

    • @ 2025-7-30 20:02:09

      NN

      • @ 2025-7-30 19:57:53

        有补充写评论里

        👍 2
        • 1