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

📄 hugeinteger.h

📁 一些C++的课件和实验源代码
💻 H
字号:
/*********************************************************************\
* Copyright (c) 2004 by Wangtao, School of Computer and Information   *
*           Technology, Beijing Jiaotong University, Beijing.         *
*           All Rights Reserved.                                      *
*                                                                     *
* Date:2004-07-26                                                    *
*                                                                     *
* Author:王涛                                                        *
*                                                                     *
* Filename:HugeInteger.h                                             *
*                                                                     *
* Description:CHugeInteger类的头文件                                 *
*     支持大数运算.                                                   *
*                                                                     *
* Modify List:                                                       *
*     2004-07-26  created by wangtao                                  *
*		  定义了加减乘除及乘方,阶乘等接口.                            *
*                                                                     *
*                                                                     *
\*********************************************************************/

#ifndef _HEADFILE_HUGEINTEGER
#define _HEADFILE_HUGEINTEGER

#define HI_MAXLEN 1280
#define DEC 10
#define HEX 16

#include <string>
using namespace std;

class CHugeInteger
{
public:
	// 构造函数和析构函数
    CHugeInteger();
	CHugeInteger(int nNum);
	CHugeInteger(unsigned __int64 llNum);
	CHugeInteger(const CHugeInteger& hInteger);
    ~CHugeInteger();

	// '='赋值运算符
	CHugeInteger& operator = (int nNum);
	CHugeInteger& operator = (unsigned __int64 llNum);
	CHugeInteger& operator = (const CHugeInteger& right);

	// 比较运算符
    bool operator == (CHugeInteger& right);
    bool operator != (CHugeInteger& right);
    bool operator >  (CHugeInteger& right);
    bool operator >= (CHugeInteger& right);
    bool operator <  (CHugeInteger& right);
    bool operator <= (CHugeInteger& right);

    bool operator == (int right);
    bool operator != (int right);
    bool operator >  (int right);
    bool operator >= (int right);
    bool operator <  (int right);
    bool operator <= (int right);

	// 加法运算符
	CHugeInteger operator + (CHugeInteger& right);
	CHugeInteger operator + (int right);
	CHugeInteger& operator += (CHugeInteger& right);
	CHugeInteger& operator += (int right);
	CHugeInteger& operator ++ ();
	
	// 减法运算符
	CHugeInteger operator - (CHugeInteger& right);
	CHugeInteger operator - (int right);
	CHugeInteger& operator -= (CHugeInteger& right);
	CHugeInteger& operator -= (int right);
	CHugeInteger& operator -- ();

	// 乘法运算符
	CHugeInteger operator * (CHugeInteger& right);
	CHugeInteger operator * (unsigned int right);
	CHugeInteger& operator *= (CHugeInteger& right);
	CHugeInteger& operator *= (unsigned int right);

	// 除法运算符
	CHugeInteger operator / (CHugeInteger& right);
	CHugeInteger operator / (unsigned int right);
	CHugeInteger& operator /= (CHugeInteger& right);
	CHugeInteger& operator /= (unsigned int right);

	// 取余运算符
	CHugeInteger operator % (CHugeInteger& right);
	int operator % (unsigned int right);
	CHugeInteger& operator %= (CHugeInteger& right);
	CHugeInteger& operator %= (unsigned int right);

	// 幂指数运算
	CHugeInteger operator ^ (unsigned int right);
	CHugeInteger& operator ^= (unsigned int right);

	// 阶乘
	static CHugeInteger Factorial(unsigned int n, bool bDouble = false);

	// 绝对值
	static CHugeInteger Abs(CHugeInteger& n);

public:
	// 获的该整数二进制位数
	int GetBitNum();
	
	// 获取某二进制位值
	bool GetBit(unsigned int bitIndex);

	// 设置某二进制位值
	void SetBit(unsigned int bitIndex, bool bSet = true);

	// 抽取中间一段位串,形成新的整数
	CHugeInteger ExtractBits(int lindex, int rindex, bool bSign = false);

	// 格式化输出
	bool Format(string& strOutText, unsigned int system = DEC);

	// 将超大整数转换为double类型表示
	double ToDouble();

	// 将超大整数的第一个32位取出表示成UINT
//	UINT ToUINT();

	void Print();

protected:
    int m_nSign;						// 符号
    int m_nLength;						// 长度
    unsigned int m_ulValue[HI_MAXLEN];

protected:
    int Compare(CHugeInteger& hInteger); 

};

#endif

⌨️ 快捷键说明

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