首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

两个超大数之间怎么取余数?

2012-03-16 
两个超大数之间如何取余数?在线等?如果有两个超大数a和b,比double类型的范围还要大,怎么取他们的余数呢?有

两个超大数之间如何取余数?在线等?
如果有两个超大数a和b,比double类型的范围还要大,怎么取他们的余数呢?有没有什么好的快的办法参考一下?

[解决办法]
可以考虑分解啊
把大的数据分解为不会溢出的数据

比如:超大数据,A、B

A Mod B->(A1*A2) Mod B->((A1 Mod B)*(A2 Mod B)) Mod B

如此分解下去,就能求出结果
[解决办法]
上面的说明中:A=A1*A2
依据这个思想,写一个函数即可
[解决办法]
你说的是不是CRC校验?

看看这个能不能帮到呢?
http://blog.sina.com.cn/s/blog_7efa20840100xqw3.html
[解决办法]
自己写 一个大数取余函数呗
[解决办法]
方法倒是有,就是当两个数据相差很大时非常的耗费时间

VB code
Option ExplicitPrivate Declare Function GetTickCount Lib "kernel32" () As LongPrivate Sub Command1_Click()    Dim a As Variant    Dim b As Variant    Dim lngP As Long        a = 1E+20    b = 112400000000#    lngP = GetTickCount    Do        a = a - b    Loop Until a < b    lngP = GetTickCount - lngP    Debug.Print a    Debug.Print "共耗时:" & lngP & "ms"End Sub
[解决办法]
用 Decimal 类型,最大可到 +/- 79,228,162,514,264,337,593,543,950,335
VB code
Option ExplicitSub Main()    Dim a As Variant    Dim b As Variant    Dim c As Variant    Dim d As Variant        a = CDec("12345678901234567890")    b = CDec("7")    c = Round(a / b, 0)    d = a - b * c        Debug.Print a & " = " & b & " * " & c & " + " & dEnd Sub
[解决办法]
哈哈,再大就该上大数运算了
[解决办法]
探讨
用 Decimal 类型,最大可到 +/- 79,228,162,514,264,337,593,543,950,335

VB code
Option Explicit

Sub Main()
Dim a As Variant
Dim b As Variant
Dim c As Variant
Dim d As Variant

……

[解决办法]
探讨
如果有两个超大数a和b,比double类型的范围还要大,怎么取他们的余数呢?有没有什么好的快的办法参考一下?

[解决办法]

要看大到什么程度。比 Double 大的数非常多,也有不同的等级和对应算法。

另外,是什么数?如果是非负整数,就比较好办。反之,如果是浮点数,就很麻烦。

比较省事的做法,是到网上找一个支持大数除法的类模块或标准动态库。
[解决办法]

由于公开密码算法的发展,对大数算法的研究很兴旺。你这个需求,应该是比较基础的。上网搜搜,很多。

热点排行