比如1234567890*36542或者659874569345 xor 5689745687之类的咚咚?到底如何才能防止溢出呢?

解决方案 »

  1.   

    参考http://blog.csdn.net/northwolves/category/12809.aspx?Show=All比如大数阶乘的计算(三) 
    Sub calcfactorial(ByVal n As Integer)
    Dim XYS() As Integer, x() As Integer, y() As Integer, result() As String, i As Long, j As Long, k As Long, TEMP As Long, stimer As Double
    If n < 0 Then Exit Sub
    ReDim x(1)
    ReDim XYS(1)
    x(1) = 1
    XYS(1) = 1
    k = 1
    stimer = Timer
    Do While k <= nTEMP = Len(CStr(k))
    ReDim y(1 To TEMP)
    For i = 1 To TEMP
    y(i) = Val(Mid(k, TEMP + 1 - i, 1))
    Next
    ReDim XYS(1 To UBound(x) + UBound(y))
    For i = 1 To UBound(x)
    For j = 1 To UBound(y)
    XYS(i + j - 1) = XYS(i + j - 1) + x(i) * y(j)
    Next
    Next
    For i = 1 To UBound(x) + UBound(y) - 1
    TEMP = XYS(i) \ 10
    XYS(i) = XYS(i) Mod 10
    XYS(i + 1) = XYS(i + 1) + TEMP
    Nextx = XYS
    If x(UBound(x)) = 0 Then ReDim Preserve x(1 To UBound(x) - 1)
    k = k + 1
    Loop
    ReDim result(1 To UBound(x))
    For i = 1 To UBound(x)
    result(i) = x(UBound(x) + 1 - i)
    Nextfactorial = Join(result, "")
    Debug.Print k - 1 & "! : 用时 "; Timer - stimer & " 秒, 结果 " & UBound(x) & " 位"
    Debug.Print factorial
    Erase x()
    Erase y()
    Erase XYS()
    Erase result()
    End SubPrivate Sub Command1_Click()
    For i = 1 To 9
    calcfactorial i * 100
    Next
    For i = 1 To 10
    calcfactorial i * 100
    Next
    End Sub
    关键是 Join、Mid等函数的作用
      

  2.   

    //一般就是用数组来存放每一位的数据可以用Byte型数组来存放每8位(二进制)的数据,一个Byte相当于一位,可以进位,比如第二个Byte的1,相当于256,符号需要另外存放
      

  3.   

    谢谢各位,请问如何实现异或运算呢?观察了似乎没有xor的解决方法。
      

  4.   

    异或就是XOR呀,不只楼主什么意思
      

  5.   

    XOR本身就是一个按位的逻辑运算,如果用上面说的数组记录的办法,只需要把数组里每个元素与另一个大数数组里相应的元素分别使用XOR进行运算然后拼接起来就可以了。
    我没学过布尔代数,纯属个人理解,不知道对不对,还请高人指点。
      

  6.   

    我的意思就是如何实现大数的xor运算呀?
      

  7.   

    试试 currency 数据类型
      

  8.   

    两个Byte型数组对应的元素,进行Xor运算即可,结果放到另外的Byte型数组
      

  9.   

    谢谢各位,但是有没有朋友说说xor到底如何实现呢?
      

  10.   

    转换成二进制 逐位 xor 求解,最后再转换成十进制输出
      

  11.   

    我碰到过用Mod运算符无法运算的数字,后来自己编了个MyMod函数,呵呵
    其他的大树运算我都是用String类型解决的。