首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

大数的表示和存储,大家有什么好设计建议?解决方案

2012-03-26 
大数的表示和存储,大家有什么好设计建议?我现在想写一个大整数类,这个类有一个构造函数就是接受2~36进制的

大数的表示和存储,大家有什么好设计建议?
我现在想写一个大整数类,这个类有一个构造函数就是接受2~36进制的数的字符串,也就是:
CHugeInt::CHugeInt(char value[], int nRadix); //2~36进制
关于内部怎么表示这些整数,大家有什么好建议吗?内部用int数组来模拟二进制补码,还是用字符串数组来表示呢?

[解决办法]
内部直接用 byte 数组按从地到高的次序存放各进制位的值,比如以下方式都表示值 52
二进制:{0,0,1,0,1,1}
十进制:{2,5}
十六进制:{4,3}

[解决办法]
在C#里用List<int>比较好.因为要变长,用char value[]不好.
[解决办法]
虽然用二进制方式存储最节省空间,可以认为是 256 进制的 byte 数组,但是对大多数用十进制输入输出的情况,要频繁进行进制转换,不如直接按初始的进制存储。
[解决办法]
关于内部数的表示,要综合考虑以下方面:1、输入输出便捷;2、内部算法实现容易且高效。

如果你仅仅是为了存储及输出,可以考虑直接用字符串形式,
否则建议还是用OS bits的内部数据类型,以方便中间结果的计算。
至于内部的radix,可以考虑每个存储单元一次存若干“位”,以节省空间(同时还兼顾高效)。
[解决办法]
其实大数本身的运算用何种方式存储影响不大,最麻烦的是输入输出时进制转换,等于是要不停地作取模或乘法运算;所以尽量支持任何进制的存储和运算,减少进制转换的运算。
[解决办法]
双向unsigned char list存储和long数组相比,性能差距相当明显,主要是做乘除法的时候。
[解决办法]
偶当时做的时候,用的int数组,效率还可以,主要是处理方便,呵呵
[解决办法]
1 我的博客有一篇文章是讲述大数的表示的,可参阅之,或许可以给你带来帮助,见下:
阶乘之计算从入门到精通-大数的表示(http://blog.csdn.net/liangbch/archive/2007/04/12/1562014.aspx )

2.另外,我的 阶乘之计算从入门到精通-入门篇 的三篇文章给出了采用了几种不同 大数表示法的代码,从中可以看到不同大数表示法的运行效率的差异。

热点排行