📄 hugeintx.h
字号:
// HugeIntX.h: interface for the CHugeIntX class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_HUGEINTX_H__5B7DCBAC_6D89_4C55_B51F_D96B5E741B51__INCLUDED_)
#define AFX_HUGEINTX_H__5B7DCBAC_6D89_4C55_B51F_D96B5E741B51__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "HugeCalc.h"
class CInteriorX;
class CHugeIntX;
#ifndef _CHUGEINTX_VECTOR
#define _CHUGEINTX_VECTOR
typedef vector< CHugeIntX, HC_ALLOC > CHUGEINTX_VECTOR;
#endif // !defined(_CHUGEINTX_VECTOR)
#ifndef _LPCHUGEINTX_VECTOR
#define _LPCHUGEINTX_VECTOR
typedef vector< CONST CHugeIntX *, HC_ALLOC > LPCHUGEINTX_VECTOR;
#endif // !defined(_LPCHUGEINTX_VECTOR)
#define HUGEINTX_API HUGECALC_API
class HUGEINTX_API CHugeIntX
{
friend class CHugeInt;
// CompareAbs
HUGEINTX_API friend CONST SINT8 CompareAbs( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST SINT8 CompareAbs( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST SINT8 CompareAbs( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST SINT8 CompareAbs( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST SINT8 CompareAbs( CONST CHugeIntX& left, CONST CHugeIntX& right );
// Compare
HUGEINTX_API friend CONST SINT8 Compare( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST SINT8 Compare( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST SINT8 Compare( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST SINT8 Compare( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST SINT8 Compare( CONST CHugeIntX& left, CONST CHugeIntX& right );
// relation operators
HUGEINTX_API friend CONST BOOL operator ==( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator ==( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator ==( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST BOOL operator ==( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST BOOL operator ==( CONST CHugeIntX& left, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator !=( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator !=( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator !=( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST BOOL operator !=( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST BOOL operator !=( CONST CHugeIntX& left, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator <( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator <( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator <( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST BOOL operator <( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST BOOL operator <( CONST CHugeIntX& left, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator <=( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator <=( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator <=( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST BOOL operator <=( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST BOOL operator <=( CONST CHugeIntX& left, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator >( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator >( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator >( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST BOOL operator >( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST BOOL operator >( CONST CHugeIntX& left, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator >=( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator >=( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST BOOL operator >=( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST BOOL operator >=( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST BOOL operator >=( CONST CHugeIntX& left, CONST CHugeIntX& right );
// +
HUGEINTX_API friend CONST CHugeIntX operator +( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST CHugeIntX operator +( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST CHugeIntX operator +( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST CHugeIntX operator +( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST CHugeIntX operator +( CONST CHugeIntX& left, CONST CHugeIntX& right );
// -
HUGEINTX_API friend CONST CHugeIntX operator -( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST CHugeIntX operator -( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST CHugeIntX operator -( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST CHugeIntX operator -( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST CHugeIntX operator -( CONST CHugeIntX& left, CONST CHugeIntX& right );
// *
HUGEINTX_API friend CONST CHugeIntX operator *( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST CHugeIntX operator *( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST CHugeIntX operator *( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST CHugeIntX operator *( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST CHugeIntX operator *( CONST CHugeIntX& left, CONST CHugeIntX& right );
// Division, return quotient
HUGEINTX_API friend CONST SINT64 Div( CONST UINT32 u32Dividend, CONST CHugeIntX& divisor, UINT32 * CONST pRemainder = NULL );
HUGEINTX_API friend CONST SINT32 Div( CONST SINT32 s32Dividend, CONST CHugeIntX& divisor, SINT32 * CONST pRemainder = NULL );
// /
HUGEINTX_API friend CONST SINT64 operator /( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST SINT32 operator /( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST CHugeIntX operator /( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST CHugeIntX operator /( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST CHugeIntX operator /( CONST CHugeIntX& left, CONST CHugeIntX& right );
// %
HUGEINTX_API friend CONST UINT32 operator %( CONST UINT32 u32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST SINT32 operator %( CONST SINT32 s32Num, CONST CHugeIntX& right );
HUGEINTX_API friend CONST SINT64 operator %( CONST CHugeIntX& left, CONST UINT32 u32Num );
HUGEINTX_API friend CONST SINT32 operator %( CONST CHugeIntX& left, CONST SINT32 s32Num );
HUGEINTX_API friend CONST CHugeIntX operator %( CONST CHugeIntX& left, CONST CHugeIntX& right );
public:
// Constructor
explicit CHugeIntX( VOID );
explicit CHugeIntX( CONST UINT32& u32Num );
explicit CHugeIntX( CONST SINT32& s32Num );
explicit CHugeIntX( CONST UINT64& u64Num );
explicit CHugeIntX( CONST SINT64& s64Num );
explicit CHugeIntX( CONST LPCTSTR lpszNum );
explicit CHugeIntX( CONST CARRY_PARAM& CarryParam );
explicit CHugeIntX( CONST CHugeIntX& right );
explicit CHugeIntX( CONST CHugeInt& right );
// destructor
/*virtual */~CHugeIntX( );
static CONST SIZE_T GetCount( VOID );
// reload operator ->
CHugeIntX * CONST operator ->( VOID );
// get property
CONST BOOL operator !( VOID ) CONST;
CONST BOOL IsAbsOne( VOID ) CONST;
CONST BOOL IsOdd( VOID ) CONST;
CONST BOOL IsEven( VOID ) CONST;
CONST SINT8 GetSign( VOID ) CONST;
CONST SIZE_T GetDigitals( VOID ) CONST;
CONST BOOL CanConvertSINT64( SINT64& s64Num ) CONST;
CONST CHugeIntX Abs( VOID ) CONST;
CONST CHugeIntX operator -( VOID ) CONST;
CHugeIntX& Negate( VOID );
CHugeIntX& Swap( CHugeIntX& right );
// reload operators
CHugeIntX& operator =( CONST UINT32& u32Num );
CHugeIntX& operator =( CONST SINT32& s32Num );
CHugeIntX& operator =( CONST UINT64& u64Num );
CHugeIntX& operator =( CONST SINT64& s64Num );
CHugeIntX& operator =( CONST LPCTSTR lpszNum );
CHugeIntX& operator =( CONST CARRY_PARAM& CarryParam );
CHugeIntX& operator =( CONST CHugeIntX& right );
CHugeIntX& operator =( CONST CHugeInt& right );
CHugeIntX& operator +=( CONST UINT32 u32Num );
CHugeIntX& operator +=( CONST SINT32 s32Num );
CHugeIntX& operator +=( CONST CHugeIntX& right );
CHugeIntX& operator ++( VOID );
CONST CHugeIntX operator ++( CONST INT );
CHugeIntX& operator -=( CONST UINT32 u32Num );
CHugeIntX& operator -=( CONST SINT32 s32Num );
CHugeIntX& operator -=( CONST CHugeIntX& right );
CHugeIntX& operator --( VOID );
CONST CHugeIntX operator --( CONST INT );
CHugeIntX& operator *=( CONST UINT32 u32Num );
CHugeIntX& operator *=( CONST SINT32 s32Num );
CHugeIntX& operator *=( CONST CHugeIntX& right );
CHugeIntX& operator /=( CONST UINT32 u32Num );
CHugeIntX& operator /=( CONST SINT32 s32Num );
CHugeIntX& operator /=( CONST CHugeIntX& right );
CHugeIntX& operator %=( CONST UINT32 u32Num );
CHugeIntX& operator %=( CONST SINT32 s32Num );
CHugeIntX& operator %=( CONST CHugeIntX& right );
CHugeIntX& operator <<=( CONST UINT32 u32LShift );
CHugeIntX& operator >>=( CONST UINT32 u32RShift );
CONST CHugeIntX operator <<( CONST UINT32 u32LShift ) CONST;
CONST CHugeIntX operator >>( CONST UINT32 u32RShift ) CONST;
CHugeIntX& operator &=( CONST CHugeIntX& right );
CHugeIntX& operator ^=( CONST CHugeIntX& right );
CHugeIntX& operator |=( CONST CHugeIntX& right );
CONST CHugeIntX operator &( CONST CHugeIntX& right ) CONST;
CONST CHugeIntX operator ^( CONST CHugeIntX& right ) CONST;
CONST CHugeIntX operator |( CONST CHugeIntX& right ) CONST;
CONST SIZE_T GetBits( VOID ) CONST;
CONST BOOL IsBitOne( CONST UINT32 u32BitIndex );
// Multiplication, return product
CHugeIntX& Mul( CONST UINT32 u32Multiplicand, CONST CHugeIntX& multiplier );
CHugeIntX& Mul( CONST SINT32 s32Multiplicand, CONST CHugeIntX& multiplier );
CHugeIntX& Mul( CONST CHugeIntX& multiplicand, CONST UINT32 u32Multiplier );
CHugeIntX& Mul( CONST CHugeIntX& multiplicand, CONST SINT32 s32Multiplier );
CHugeIntX& Mul( CONST CHugeIntX& multiplicand, CONST CHugeIntX& multiplier );
// Division, return quotient
CHugeIntX& Div( CONST CHugeIntX& dividend, CONST UINT32 u32Divisor, SINT64 * CONST pRemainder = NULL );
CHugeIntX& Div( CONST CHugeIntX& dividend, CONST SINT32 s32Divisor, SINT32 * CONST pRemainder = NULL );
CHugeIntX& Div( CONST CHugeIntX& dividend, CONST CHugeIntX& divisor, CHugeIntX * CONST pRemainder = NULL );
CHugeIntX& Pow( CONST UINT32 r );
CHugeIntX& Pow( CONST CHugeIntX& hugeBase, CONST UINT32 r );
// Extraction
CHugeIntX& Root( CONST CHugeIntX& radicand, CONST UINT32 r, CHugeIntX * CONST pRemainder = NULL, BOOL * CONST pIsReal = NULL );
// Logarithm
CONST UINT32 Log( CONST UINT32 u32Base, BOOL * CONST pIsExact = NULL ) CONST;
CONST UINT32 Log( CONST CHugeIntX& hugeBase, BOOL * CONST pIsExact = NULL ) CONST;
// PowMod
CHugeIntX& PowMod( CONST UINT32 u32Base, CONST UINT32 r, CONST CHugeIntX& hugeMod );
CHugeIntX& PowMod( CONST SINT32 s32Base, CONST UINT32 r, CONST CHugeIntX& hugeMod );
CHugeIntX& PowMod( CONST CHugeIntX& hugeBase, CONST UINT32 r, CONST CHugeIntX& hugeMod );
// Fibonacci
CHugeIntX& Fibonacci( CONST UINT32 n );
// Factorial, Permutation, Combination
CHugeIntX& Factorial( CONST UINT32 n, CONST BOOL bDouble = FALSE );
CHugeIntX& Permutation( CONST UINT32 n, CONST UINT32 r );
CHugeIntX& Combination( CONST UINT32 n, CONST UINT32 r );
// Greatest Common Divisor
CHugeIntX& Gcd( CONST UINT32 u32Num, CONST CHugeIntX& right );
CHugeIntX& Gcd( CONST SINT32 s32Num, CONST CHugeIntX& right );
CHugeIntX& Gcd( CONST CHugeIntX& left, CONST UINT32 u32Num );
CHugeIntX& Gcd( CONST CHugeIntX& left, CONST SINT32 s32Num );
CHugeIntX& Gcd( CONST CHugeIntX& left, CONST CHugeIntX& right );
CHugeIntX& Gcd( CONST CHUGEINTX_VECTOR& vHugeIntX );
CHugeIntX& Gcd( CONST LPCHUGEINTX_VECTOR& vLpHugeIntX );
// Lowest Common Multiple
CHugeIntX& Lcm( CONST U32_VECTOR& vU32Num );
CHugeIntX& Lcm( CONST UINT32 u32Num, CONST CHugeIntX& right );
CHugeIntX& Lcm( CONST SINT32 s32Num, CONST CHugeIntX& right );
CHugeIntX& Lcm( CONST CHugeIntX& left, CONST UINT32 u32Num );
CHugeIntX& Lcm( CONST CHugeIntX& left, CONST SINT32 s32Num );
CHugeIntX& Lcm( CONST CHugeIntX& left, CONST CHugeIntX& right );
CHugeIntX& Lcm( CONST CHUGEINTX_VECTOR& vHugeIntX );
CHugeIntX& Lcm( CONST LPCHUGEINTX_VECTOR& vLpHugeIntX );
CHugeIntX& Product( CONST U32_VECTOR& vU32Num );
CHugeIntX& Product( CONST CHUGEINTX_VECTOR& vHugeIntX );
CHugeIntX& Product( CONST LPCHUGEINTX_VECTOR& vLpHugeIntX );
// if r==0, then call function: Product( ... );
CHugeIntX& SumsOfLikePowers( CONST U32_VECTOR& vU32Num, CONST UINT32 r = 1 );
CHugeIntX& SumsOfLikePowers( CONST CHUGEINTX_VECTOR& vHugeIntX, CONST UINT32 r = 1 );
CHugeIntX& SumsOfLikePowers( CONST LPCHUGEINTX_VECTOR& vLpHugeIntX, CONST UINT32 r = 1 );
// Output
CONST LPCTSTR ConvertToStr( CONST BYTE byFormat = FS_DEFAULT, SIZE_T * CONST pStrLen = NULL ) CONST;
// This function can convert the huge integer to a string of digits in another carry system.
CONST LPCTSTR ConvertToStr( CONST UINT32 u32Carry /*= 10*/, UINT32 * CONST pDigitals = NULL, CONST BYTE byFormat = FS_DEFAULT, CONST UINT32 u32BandLength = 3, SIZE_T * CONST pStrLen = NULL ) CONST;
VOID FreeStrBuffer( VOID ) CONST;
CARRY_PARAM& ConvertToCarry( CARRY_PARAM& CarryParam ) CONST;
protected:
private:
explicit CHugeIntX( CONST CInteriorX &right );
CInteriorX &operator =( CONST CInteriorX &right );
CInteriorX * CONST m_pInteriorX;
};
#endif // !defined(AFX_HUGEINTX_H__5B7DCBAC_6D89_4C55_B51F_D96B5E741B51__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -