2014-01-05 62 views
6

我總是得到一個運行時錯誤在VBA:運行時錯誤6 - 如何使Mod處理雙重?

Sub rsa() 

Dim c1 As Long 
Dim c2 As Long 
Dim z As Long 
Dim e As Long 

pt = "xa" 
n = 187 
e = 7 

For i = 1 To Len(pt) 

    b = Mid$(pt, i, 1) 

     If b <> " " Then 

      z = Asc(UCase(b)) 
      'Here is the problem: 
      c = z^e Mod n 
      Text = Text & c 

     Else 

     Text = Text & " " 

     End If 

Next i 
Cells(20, 4).Value = Text 
End Sub 

我得到的運行時錯誤的c = z^e Mod n

我試過不同的數據類型,但沒有解決方案。

+0

什麼是優先權?你也確定z是一個數值嗎?什麼是z不應該這樣做z:Cint(z) –

+0

z在我的例子中是88。 – yab86

回答

10

A Mod B是等於A - Int(A/B) * B,所以你可以嘗試使用c = z^e - Int(z^e/n) * n,而不是c = z^e Mod n。它適用於我

+1

完美 - 有效!非常感謝!!!! – yab86

+4

問題是因爲在使用它們之前MOD試圖將'z^e'和'n'轉換爲'Long',但是'z^e'大於'Long'的最大值。 –

2

運行時錯誤6是數字溢出操作。你的一個變量沒有被定義得足夠大或沒有足夠的精度。你需要展示更多的例子等......讓人們給你一個更好的主意。我要做的第一件事就是在執行公式前打印所有數字。

使用數據類型雙和轉換爲雙時使用CDbl()

+0

那麼,我做了:z = 88/e = 7/n = 187/c = 0 – yab86

+0

我看到的問題是calc中的一些變量沒有定義(例如你剛分配了一個值)。默認的數據類型可能是INT ...你應該確保所有的變量都被定義和定義一樣。如果他們不能相同,那麼確保你投射/轉換(例如CLng())他們互相玩好。 –

+0

謝謝,但那不起作用:-( – yab86