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

📄 usuperint.h

📁 可以进行无限制的整数计算
💻 H
字号:
// USuperInt.h: interface for the CUSuperInt class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_USUPERINT_H__3C01C36B_443D_411C_83E2_9C21B2815BD5__INCLUDED_)
#define AFX_USUPERINT_H__3C01C36B_443D_411C_83E2_9C21B2815BD5__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/*
无符号大整数类
作者:缪元虎,四川绵阳供电局
myh9999@vip.sina.com
QQ:3977993
最后修改时间:2003-8-10
*/
class CUSuperInt
{
public:
	//构造及析构函数
	CUSuperInt();
	CUSuperInt(DWORD dwValue);
	CUSuperInt(char* pszVal);
	CUSuperInt(CUSuperInt& x);	
	virtual ~CUSuperInt();
public:
	//以下定义的是运算
	//重载的赋值运算符
	CUSuperInt& operator = (CUSuperInt& x);
	CUSuperInt& operator = (char* pszVal);
	CUSuperInt& operator = (DWORD dwValue);

	//重载的加法运算符
	CUSuperInt& operator += (CUSuperInt& x);
	CUSuperInt& operator += (DWORD dwValue);	
	CUSuperInt  operator + (CUSuperInt& x);
	CUSuperInt  operator + (DWORD dwValue);
	CUSuperInt  operator ++();			//++a
	CUSuperInt  operator ++(int);		//a++
	
	//重载的减法运算符,因为是无符号数,所以结果为大数减小数得到的差
	CUSuperInt& operator -= (CUSuperInt& x);
	CUSuperInt& operator -= (DWORD dwValue);
	CUSuperInt operator - (CUSuperInt& x);
	CUSuperInt operator - (DWORD dwValue);

	CUSuperInt&  operator --();			//--a
	CUSuperInt  operator --(int);		//a--

	//重载的乘法运算符
	CUSuperInt& operator *= (DWORD dwValue);
	CUSuperInt& operator *= (CUSuperInt& x);
	CUSuperInt  operator * (DWORD dwValue);
	CUSuperInt  operator * (CUSuperInt& x);

	//重载的除法运算符
	DWORD operator /= (DWORD dwValue); //返回余数
	CUSuperInt operator /= (CUSuperInt& x);//返回余数
	CUSuperInt operator / (DWORD dwValue); //返回商
	CUSuperInt operator / (CUSuperInt& x);//返回商

	CUSuperInt operator % (CUSuperInt& x);
	DWORD operator % (DWORD dwValue);

	//重载的比较运算符
	bool operator == (CUSuperInt& x);
	bool operator == (DWORD dwValue);
	bool operator != (CUSuperInt& x);
	bool operator != (DWORD dwValue);
	bool operator > (CUSuperInt& x);
	bool operator > (DWORD dwValue);
	bool operator >= (CUSuperInt& x);
	bool operator >= (DWORD dwValue);
	bool operator < (CUSuperInt& x);
	bool operator < (DWORD dwValue);
	bool operator <= (CUSuperInt& x);
	bool operator <= (DWORD dwValue);


	//乘2运算,即 	//  a =  a * 2^dwTimes; 相当于左移一位二进制,低位补0
	CUSuperInt& Double(DWORD dwTimes = 1);

	//除2运算; 相当于右移一位二进制,高位边补0,低位舍弃
	CUSuperInt& Half(DWORD dwTimes = 1);
public:
	//以下定义的是常用的操作
	//重新分配内存空间,用于增加数据长度,n为新长度
	void Expand(DWORD n);

	//压缩数据,以节省空间。指去掉高位多余的0。
	void Compress();	

	//转换在十六进制数字符串
	void ToHexStr(CString& s);
	CString ToHexStr();
	
	//转换成十进制数字符串
	void ToDecStr(CString& s);
	CString ToDecStr();

	void Debug();

protected:
	//辅助函数
	inline DWORD LeastOver(DWORD n) ;

protected:
	DWORD *pValue;		//指向一个DWORD数组,用于存放数值
	DWORD len;			//DWORD数组的长度
	DWORD last;			//数组中的有效长度
};

const My_ErrorNo_OverFlow = 0;
const My_ErrorNo_ZeroByDiv = 1;
class CMyException  
{
public:
	CMyException(char* msg, UINT uErrorNo);
	virtual ~CMyException();
	char* m_szMsg;
	UINT  m_uErrorNo;	
};

#endif // !defined(AFX_USUPERINT_H__3C01C36B_443D_411C_83E2_9C21B2815BD5__INCLUDED_)

⌨️ 快捷键说明

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