Dim s1, s3, s5, s7, p As Integer
Private Sub Command1_Click()    '原文到译文
word = Text1.Text
changeword = jiami(word)
Text2.Text = changeword
Text4.Text = s1
Text6.Text = s3
Text7.Text = s5
Text8.Text = s7
Text3.Text = p
End SubPrivate Sub Command2_Click()       '译文到原文
changeword = Text2.Text
word = jiemi(changeword)
Text1.Text = Chr(word)
End SubPublic Function jiami(a)   '加密函数,最主要是这个
asc2 = Asc(a)
p = Int(100 + 900 * Rnd())
s1 = Int(10 * Rnd())
s4 = Int(10 * Rnd())
s7 = Int(10 * Rnd())
s6 = Int(100 + 100 * Rnd())
Do
     If Not (p < s6 And s6 < s4 * p And (s6 Mod p) ^ 3 < s4 ^ 3 And s4 ^ 3 < s1 ^ 3 And s4 ^ 3 < s7 ^ 3 And s7 ^ 3 < p) Then
         p = Int(100 + 900 * Rnd())
         s1 = Int(10 * Rnd())
         s4 = Int(10 * Rnd())
         s7 = Int(10 * Rnd())
         s6 = Int(100 + 900 * Rnd())
     Else
         Exit Do
     End If
Loop
Print Str(s6) + " " + Str(s4)
s5 = s4 * p + s6
s3 = s4 * p + s5
s4 = 0
s6 = 0
w = Int(100 + 900 * Rnd)
r = Int(100 + 900 * Rnd)
jiami = (s3 - s5) ^ 3 * w + asc2 * s5 + r * (s3 - s5)
End Function
Public Function jiemi(b)    '解密函数
s3 = Text6.Text
s5 = Text7.Text
p = Text3.Text
jiemi = (b Mod p) / ((2 * s5 - s3) Mod p)
End Function
就是上面代码的最后一个函数的最后一句老是出现溢出,怎么回事  
给我看看好不好
问了好几个人了 
都解决不了

解决方案 »

  1.   

    Public Sub Print( _
       ByVal FileNumber As Integer, _
       ByVal ParamArray Output() As Object _
    )
            FileOpen(1, "c:\trash.txt", OpenMode.Output)
            Print(1, Str(s6) + " " + Str(s4))
            FileClose(1)
      

  2.   

    sorry
    还是不怎么懂你写的  
    可不可以说清楚点
    麻烦了
      

  3.   

    sorry 我们用的不是同一个版本
    不过我用你的代码调试没有出现异常(除了那个Print参数不对,可能是版本导致)
    在出异常之前,你把那些变量的值输出来看看都是什么
      

  4.   

    Public Function jiemi(b)    '解密函数
    s3 = Text6.Text
    s5 = Text7.Text
    p = Text3.Text
    jiemi = (b Mod p) / ((2 * s5 - s3) Mod p)
    End Function   函数定义也没返回类型,看得真累,不懂,OVER
      

  5.   

    jiemi=(b-fix(b/p)*p)/((2 * s5 - s3) Mod p)这样就不发生溢出了,又一条想说一下。你编码好没有规范阿,函数返回值没有类型,通篇下来n多变量没有定义,有定义的还定义成Variant类型我仅仅提个意见
      

  6.   

    可能是除数为0了。你检查以下((2 * s5 - s3) Mod p)是不是为0了。
      

  7.   

    Dim s1, s3, s5, s7, p As Integer!!!这声明是什么东西啊..就p是integer类型..前面几个都是系统默认的Variant还有程序没tab的啊...看得累
      

  8.   

    呵呵 
    谢谢楼上的几位了 你们说的我以后会注意的  
    我想知道下 如果不声明变量类型 
    会出现什么严重后果啊 
    对了  特别是感谢clear_zero(清晰)
    我按你的改了下  确实成功了 
    我可以知道下为什么要这样改吗还有最后一个很重要的问题  我这几天刚开始进驻CSDN 听别人说的结贴  还要给分的 
    是怎么回事  怎么结贴呢   
      

  9.   

    检查程序,你这里出错了jiemi = (b Mod p) / ((2 * s5 - s3) Mod p)
    然后分别检查,发现(b Mod p) 这里错了。出错原因应该是去余这个函数实际上是把结果分为商和余数,由于b这个数字太大了,所以商部分太大了出现溢出。然后想着如何既决就好了关于揭帖的问题,你看到点击管理,自然就知道了
    :)
      

  10.   

    jiemi = (b*1.0 Mod p*1.0) / ((2 * s5 - s3)*1.0 Mod p*1.0)这样呢,你没有很好定义变量引起的,像 p = Text3.Text,p 的类型可能就是整形,其范围为 -32,768 到 32,767 之间,b Mod p 结果也是视为整形,值超过32,767 就溢出。