通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
资源搜索:
热门搜索:Linux VB C语言 PhotoShop Flash TCP/IP
   首页 | 文章 | 软件 | 动画 | 资源 | 励志 | 骗术 | 论坛 | 邮箱 | 会员中心 | 军事 | 科技 | 博客 | 图片 | 商城 | 最新更新 | 800g资源 | 爱心黑客
您现在的位置: 爱国者黑客 >> 资源 >> 程序设计 >> C#语言 >> 数据库编程 >> 文章正文
可用于数论计算的无符号大整数类
责任编辑:ncic   更新日期:2007-4-2

本文示例源代码下载

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

  一、类的基本结构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次,采用逻辑右移算法,所以这个函数将丢失余数。

  四、数据的输出

  定义了ToDecStr()和ToHexStr()两个成员分别用于将其转换为十进制和十六进制字符串输出。

  • 上一篇文章:
  • 下一篇文章:
  • 热门文章
    Olldbg常见问题
    汇编语言的艺术(组合语言的艺术)--观
    汇编语言的艺术(组合语言的艺术)--准
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言的艺术(组合语言的艺术)--基
    汇编语言---程式设计 (4)
    虚拟8086模式
    SYS命令使用说明
    javascript + CSS 实现动态菜单显
    推荐文章
    自制Windows XP SP2自动安装光盘
    SQLServer注入工具改进版 v1.02
    使用photoshop CS进行自然美肤
    Photoshop绘制诺基亚手机
    PHOTOSHOP制作秋日之梦
    PHOTOSHOP鼠绘名模王爱萍
    Photoshop制作晶莹飞溅的水珠
    教你用PHOTOSHOP做放大镜
    鼠绘美女及服装修画全过程