PDA

View Full Version : محاسبه n! های خیلی بزرگ



farideh_en
دوشنبه 23 اردیبهشت 1387, 12:57 عصر
با سلام و خسته نباشید من یه برنامه برای محاسبه n! های خیلی بزرگ می خواستم خودم وبی زیاد کار نکردم ممنون میشم کمکم کنین.

farideh_en
دوشنبه 23 اردیبهشت 1387, 13:44 عصر
فقط کافیه یه button روی فرم بزارین.




PublicClass Form1


PrivateSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim result AsInteger = 1
MessageBox.Show(Factorial("500"))
EndSub



PrivateFunction Factorial(ByVal ofThisStringsValue AsString) AsString
Dim answer AsString = "1"
If IsNumeric(ofThisStringsValue) = FalseThen
ThrowNew Exception("Value passed is NOT a number.")
Else
If Val(ofThisStringsValue) - Int(Val(ofThisStringsValue)) <> 0 Then
ThrowNew Exception("Please pass a whole number in your string.")
EndIf
EndIf
Dim loopEnd AsLong = CLng(ofThisStringsValue)
Dim start AsLong = 2
Do
answer = Multiply(answer, start.ToString)
start += 1
LoopUntil start > loopEnd
Return answer.ToString
Return answer
EndFunction



PublicFunction Multiply(ByVal S1 AsString, ByVal S2 AsString) AsString
Dim A(65535) AsByte
Dim B(65535) AsByte
Dim C(65535) AsByte
Dim I, J, K, IJ, L1, L2 As Int32
L1 = S1.Length - 1
For I = 0 To L1
A(I) = CType(S1.Substring(L1 - I, 1), Byte)
Next
L2 = S2.Length - 1
For J = 0 To L2
B(J) = CType(S2.Substring(L2 - J, 1), Byte)
Next
For I = 0 To L1
For J = 0 To L2
IJ = I + J
C(IJ) += A(I) * B(J)
K = 0
While C(IJ + K) > 9
C(IJ + 1) += CByte(Fix(C(IJ) / 10))
C(IJ) = CByte(C(IJ) Mod 10)
K += 1
EndWhile
Next
Next
Dim S AsString = ""
L1 += L2 + 2
For I = L1 To 0 Step -1
S += C(I).ToString
Next
'Remove any character "0" 's from the start of the string
'until a non-zero numeric character is reached.
Dim testChr AsString = ""
Do
testChr = S.Substring(0, 1)
If testChr = "0"Then
S = S.Remove(0, 1)
Else
ExitDo
EndIf
Loop
Return S
EndFunction
EndClass