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

请高手帮忙把VB转换成VB.NET代码,不多,但是很难,该怎么解决

2012-02-19 
请高手帮忙把VB转换成VB.NET代码,不多,但是很难Subcalcfactorial(ByValnumAsLong,OptionalByRefPOWERAsStr

请高手帮忙把VB转换成VB.NET代码,不多,但是很难
Sub   calcfactorial(ByVal   num   As   Long,   Optional   ByRef   POWER   As   String,   Optional   ByRef   FIRSTNUM   As   String)
Dim   I   As   Long,   TEMP   As   Double,   temp2   As   Long,   STIME   As   Single
TEMP   =   0
temp2   =   0
STIME   =   Timer
For   I   =   1   To   num
TEMP   =   TEMP   +   Log(I)   /   Log(10)
If   TEMP   >   1000000   Then
temp2   =   temp2   +   1
TEMP   =   TEMP   -   1000000
End   If
Next
POWER   =   Format(Int(TEMP   +   1),   "000000 ")
TEMP   =   TEMP   -   Val(POWER)
POWER   =   temp2   &   POWER
If   Val(POWER)   <   10   ^   6   Then   POWER   =   Val(POWER)
FIRSTNUM   =   Left(Replace(10   ^   (TEMP),   ". ",   " "),   10)
Debug.Print   Right(Space(9)   &   num,   9)   &   "!   :   用时   "   &   Right(Space(8)   &   Format(Timer   -   STIME,   "0.00000 "),   8)   &   "   秒,   结果   "   &   Right(Space(10)   &   POWER,   10)   &   "   位,前10位为   "   &   FIRSTNUM
End   Sub


Private   Sub   Command1_Click()
Dim   I   As   Long,   J   As   Long
For   J   =   2   To   7
For   I   =   1   To   10
calcfactorial   I   *   10   ^   J
Next
Debug.Print
Next
End   Sub

请教能人!谢谢啦

[解决办法]
Private Sub calcfactorial(ByVal num As Long, _
Optional ByRef POWER As String = " ", _
Optional ByRef FIRSTNUM As String = " ")

Dim I As Long
Dim TEMP As Double
Dim temp2 As Long
Dim t1, t2 As DateTime

TEMP = 0
temp2 = 0
t1 = Now

For I = 1 To num
TEMP = TEMP + Math.Log(I) / Math.Log(10)
If TEMP > 1000000 Then
temp2 = temp2 + 1
TEMP = TEMP - 1000000
End If
Next

POWER = Format(Int(TEMP + 1), "000000 ")
TEMP = TEMP - Val(POWER)
POWER = temp2 & POWER

If Val(POWER) < 10 ^ 6 Then POWER = Val(POWER)

FIRSTNUM = Replace(10 ^ (TEMP), ". ", " ").Substring(0, 10)

t2 = Now

MsgBox((Space(9) & num).Substring((Space(9) & num).Length - 9) & "! : 用时 " & _
DateDiff(DateInterval.Second, t1, t2) & " 秒, 结果 " & _
(Space(10) & POWER).Substring((Space(10) & POWER).Length - 10) & " 位,前10位为 " & FIRSTNUM)

End Sub

Private Sub Command1_Click()

Dim I As Long, J As Long

For J = 2 To 7
For I = 1 To 10
calcfactorial(I * 10 ^ J)
Next
'Debug.Print()


Next

End Sub
[解决办法]
这样:

Sub calcfactorial(ByVal num As Integer, Optional ByRef POWER As String = " ", Optional ByRef FIRSTNUM As String = " ")
Dim I, temp2 As Integer
Dim TEMP As Double
Dim STIME As Single
TEMP = 0
temp2 = 0
STIME = CSng(Microsoft.VisualBasic.Timer())
For I = 1 To num
TEMP = TEMP + System.Math.Log(I) / System.Math.Log(10)
If TEMP > 1000000 Then
temp2 = temp2 + 1
TEMP = TEMP - 1000000
End If
Next
POWER = VB6.Format(Int(TEMP + 1), "000000 ")
TEMP = TEMP - Val(POWER)
POWER = temp2 & POWER
If Val(POWER) < 10 ^ 6 Then POWER = CStr(Val(POWER))
FIRSTNUM = Replace(CStr(10 ^ (TEMP)), ". ", " ").Substring(0, 10)

Debug.Print(Microsoft.VisualBasic.Right(Space(9) & num, 9) & "! : 用时 " & Microsoft.VisualBasic.Right(Space(8) & Format(Timer - STIME, "0.00000 "), 8) & " 秒, 结果 " & Microsoft.VisualBasic.Right(Space(10) & POWER, 10) & " 位,前10位为 " & FIRSTNUM)
End Sub


Private Sub Command1_Click()
Dim I, J As Integer
For J = 2 To 7
For I = 1 To 10
calcfactorial(CInt(I * 10 ^ J))
Next
Debug.Print( " ")
Next
End Sub

热点排行