⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bignumber.cpp

📁 大数类
💻 CPP
字号:
//Big Number
//By Leaving
//super.e@tom.com
//2004-11-1
#include<string>
#include<cstdio>
using namespace std;
const int MAX=200;
int SIZE=MAX*sizeof(int);
class CBigNum{
public:
	int num[MAX],len;
	CBigNum(){ len=1; memset(num,0,SIZE); }
	~CBigNum(){/*printf("Destroy!\n");*/} 
	void operator = (int n){
		int i;
		memset(num,0,SIZE);
		if(n==0){len=1; return;}
		for(i=0; n>0; i++, n/=10)num[i]=n%10;
		len=i;
	}
	int cmp(CBigNum& b){
		if(len!=b.len)return len-b.len;
		for(int i=len-1;i>=0;i--)
			if(num[i]!=b.num[i])return num[i]-b.num[i];
		return 0;
	}
	void operator += (int n){
		int i,in=n;
		for(i=0; in>0||i<len; i++){
			num[i]+=in;
			in=num[i]/10;	
			num[i]%=10;
		}
		len=i;
	}
	void operator += (CBigNum& n){
		int i,in=0;
		for(i=0; i<len || i<n.len || in>0; i++){
			num[i]+=n.num[i]+in;
			in=num[i]/10;
			num[i]%=10;
		}
		len=i;
	}
	void operator -= (CBigNum& n){
		int i,in=1;
		for(i=0;i<len;i++){
			num[i]=num[i]-n.num[i]+10+in-1;
			in=num[i]/10;
			num[i]%=10;
		}
		for(i=len-1;i>0;i--)if(num[i])break;
		len=i+1;
	}
	void operator *= (int n){
		int i,in=0;
		if(n==0){(*this)=0; return; }
		for(i=0;i<len||in>0;i++){
			num[i]=n*num[i]+in;
			in=num[i]/10;
			num[i]%=10;
		}
		len=i;
	}
	void operator *= (CBigNum& n){
		int i,j;
		CBigNum ans;
		for(i=0;i<len;i++)
			for(j=0;j<n.len;j++)
				ans.num[i+j]+=num[i]*n.num[j];
		for(i=0;i<len+n.len+2;i++)
			if(ans.num[i]>=10){
				ans.num[i+1]+=ans.num[i]/10;
				ans.num[i]%=10;
			}
		for(i=n.len+len+1; i>0; i--)if(ans.num[i])break;
		ans.len=i+1;
		(*this)=ans;
	}
	int operator /= (int n){
		int i,re=0;
		for(i=len-1; i>=0; i--){
			num[i]+=re*10;
			re=num[i]%n;
			num[i]/=n;
		}
		for(i=len-1; i>=0; i--)if(num[i])break;
		if(i>0)len=i+1;
		else len=1;
		return re; //返回余数 
	}
	/*////////////尽量不用 
	CBigNum& operator + (int n){
		CBigNum ans=(*this);
		ans+=(n);
		return ans;
	}
	CBigNum& operator + (CBigNum& n){
		CBigNum ans=(*this);
		ans += n;
		return ans;
	}
	CBigNum& operator - (CBigNum& n){
		CBigNum ans=(*this);
		ans -= n;
		return ans;
	}
	CBigNum& operator * (CBigNum& n){
		CBigNum ans=(*this);
		ans *= n;
		return ans;
	}
	/////////////*/
	void Print(){
		for(int i=len-1;i>=0;i--) printf("%d",num[i]);
		printf("\n");
	}
	void Print(int pointpos){
		for(int i=len-1;i>=0;i--){
			printf("%d",num[i]);
			if(i==pointpos)printf(".");
		}
		printf("\n");
	}
};
int main(void){
	system("PAUSE");
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -