WEB开发网
开发学院软件开发VC 可用于数论计算的无符号大整数类 阅读

可用于数论计算的无符号大整数类

 2010-01-23 20:32:23 来源:WEB开发网   
核心提示:前些日子,无意中访问到三思科学网,可用于数论计算的无符号大整数类,里面介绍了许多数论问题,这也是我儿时的爱好,定义了一个Half()成员用于除以2的n次,采用逻辑右移算法,于是就利用空闲时间编写了一个用于数论计算的无符号大整数类,一、类的基本结构Class CUSuperInt{public://构造及析构函数CUSu

前些日子,无意中访问到三思科学网,里面介绍了许多数论问题,这也是我儿时的爱好,于是就利用空闲时间编写了一个用于数论计算的无符号大整数类。

一、类的基本结构Class CUSuperInt
{
public:
//构造及析构函数
CUSuperInt();
CUSuperInt(DWORD dwValue);
CUSuperInt(char* pszVal);
CUSuperInt(CUSuperInt& x); 
virtual ~CUSuperInt();
protected:
DWORD *pValue; //指向一个DWORD数组,用于存放数值
DWORD len;   //DWORD数组的长度
DWORD last;  //数组中的有效长度
};

类名为CUSuperInt,第二个字母表示无符号的意思。当然只要你通过增加一个表示符号的成员,再经简单扩充即可变成有符号大整数类。

pValue指向的DWORD数组采用动态分配策略,当数组长度不够时,采用成倍分配的策略,即长度变为2*len。(这也许不是一个最好的分配方案,但可以简化设计)

last成员指示数组中数据的有效长度,这样可以减少一些不必要的运算量。last成员最小值为1,当last=1时实际就已蜕变为了一个DWORD了。

二、构造函数

类定义了四个构造函数,其中有一个构造函数的参数是一个字符串指针,它表示将一个字符串转换为一个CUSuperInt类。这样的字符串可以是十进制或十六进制的字符串,表示方式跟C语言的规范差不多,如"12345678901","0x123456789abcdef",前者表示十进制数,后者表示十六进制数。同时为了在应用中方便,也允许数字字符串中间用空格来分节,如"12345 567890"、"0x123 4567 89ab cdef"等。

三、重载运算符

重载了赋值运算符,可以将DWORD,字符串,以及CUSuperInt赋值给一个CUSuperInt对象。

重载了加减乘除等四则运算,以及++,――运算符。不过注意对于/=运算返回值为余数,商在左操作数中。而对于/运算返回商,余数丢失。

重载了%运算符,可以计算模。

重载了比较运算符,可以进行比较运算,返回一个bool值。

定义了一个Dobule()成员用于乘以2的n次方,有用逻辑左移算法。

定义了一个Half()成员用于除以2的n次,采用逻辑右移算法,所以这个函数将丢失余数。

1 2 3  下一页

Tags:用于 数论 计算

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接