用了个苯办法:(text1.text中为随机20位数,text2.text中为8-20位数,text3.text中为正确的所需的20位数)
mylen = Len(Format(Val(Text1.Text) + Val(Mid(Text2.Text, 1, 20)), "#")) - 14Text3.Text = Mid(Mid(Format(Val(Text1.Text) + Val(Mid(Text2.Text, 1, 20)), "#"), 1, 14) & _
Right(Format(Val(Right(Text1.Text, mylen)) + Val(Right(Text2.Text, mylen))), mylen), 1, 20)
哪位有好的办法??

解决方案 »

  1.   

    可以这样:将每个20位数拆成2个10位数,a1,a2;b1,b2(a2=a mod 1000000000,a1=a div 1000000000,b2=b mod 1000000000,b1=b div 1000000000)

    如果a1+a2无进位: c=a1+b1,c=0;
    如果a1+a2有进位: c=a1+b1-10000000000,n=1;(将a3的第一位的“1”去掉)
    d=a2+b2;
    则a+b=(d+n)*1000000000+c
      

  2.   

    不好意思,刚刚写错了,应该是这样:
    可以这样:将每个20位数拆成2个10位数,a1,a2;b1,b2(a2=a mod 1000000000,a1=a div 1000000000,b2=b mod 1000000000,b1=b div 1000000000)

    如果a1+a2无进位: c=a1+b1,n=0;
    如果a1+a2有进位: c=a1+b1-10000000000,n=1;(将c的第一位的“1”去掉)
    d=a2+b2;
    则a+b=(d+n)*1000000000+n   
      

  3.   

    是个密码算法中用到,位数比较大,难处理些!
    不过FORMAT函数只准确到15位,所以后面的算法需另外进行。
      

  4.   

    汇编中也是lionprince(狮子王子)这样拆开处理的。
    更简单的办法我就搞不清了。
      

  5.   

    在C语言里,也是lionprince(狮子王子)的做法来处理。
    其实,我们大家可以想想。
    在计算机的内部,二个八位二进制的数相加的过程:
    1.串行相加,低四位先加,若有进位,将进位标志寄存器置1,否则置0;高四位相加时要再加上进位标志寄存器置的值。
    2.并行相加,低四位、高四位同时运算,但要用到182等芯片来产生对高四位的进位。
    思路大致如此。
      

  6.   

    用Decimal型数据可以表示到比28位多一点,只是我没用过。
      

  7.   

    OK!没问题,可以实现
    format(CDec("45887755116608565042")+CDec("34859638993584317003"),"#")="80747394110192882045"
      

  8.   

    我也用了CDec()函数,但没跟FORMAT()结合使用,非常感谢各位,特别谢谢ky(0)!
      

  9.   

    完全搞定!
    我是为朋友设计的“边锋”www.gameabc.com密码的解密、破译小程序,自己也不知有啥用!若需要请留EMAIL,我发个EXE(绝对绿色程序,VB编的)。
      

  10.   

    hwmys(合适软件),谢谢你给我分,可以把你的程序发给我吗?
    thanks!
    我的email;[email protected]
    多谢了!
      

  11.   

    hello?
    hwmys(合适软件),你看到了吗?
      

  12.   

    谢谢hwmys(合适软件),你的程序我已经收到.