长沙未来绝对超越武汉:1000×999×998×997×996…5×4×3×2×1怎么算?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/28 03:49:20

不限位数和长度的乘法,1000的阶乘仅需20秒[VB.NET]

CODE:

Public Function ChengFa(ByVal strBeiCheng As String, ByVal strCheng As String) As String
Dim BeiCheng(), Cheng(), JI() As Byte '定义数组 被乘数、乘数、积
Dim intCheng As Integer '乘数长度
Dim intBeiCheng As Integer '被乘数长度
Dim intJi As Integer '积的长度
Dim strJI As String '积的文本格式
Dim i As Integer
Dim j As Integer
Dim intWeiShu As Integer '所得积的位数,过程中还用于表示位数

intBeiCheng = Len(strBeiCheng) '取被乘数的位数
intCheng = Len(strCheng) '取乘数的位数
intJi = intBeiCheng + intCheng '确定结果的最大位数

ReDim BeiCheng(intBeiCheng), Cheng(intCheng), JI(intJi) '重定义数组

For i = 1 To intBeiCheng
BeiCheng(i) = Mid(strBeiCheng, intBeiCheng - i + 1, 1) '给被乘数数组的每一位赋值
If Not IsNumeric(BeiCheng(i)) Then '检查输入的合法性
Return "被乘数输入错误"
End If
Next i

For i = 1 To intCheng
Cheng(i) = Mid(strCheng, intCheng - i + 1, 1) '给乘数数组的每一位赋值
If Not IsNumeric(Cheng(i)) Then '检查输入的合法性
Return "乘数输入错误"
End If
Next i

For i = 1 To intJi '结果数组积初始化
JI(i) = 0
Next i

For i = 1 To intBeiCheng '取被乘数中的每一位
For j = 1 To intCheng '取乘数中的每一位
JI(j + i - 1) = JI(j + i - 1) + BeiCheng(i) * Cheng(j)
'相乘结果累加到c中的相应位
strJI = JI(j + i - 1)
intWeiShu = 0
Do While strJI >= 10 'c中的每一位进位检查
JI(j + i + intWeiShu - 1) = strJI Mod 10 '本位处理
JI(j + i + intWeiShu) = JI(j + i + intWeiShu) + strJI \ 10
'进位处理
strJI = JI(j + i + intWeiShu)
intWeiShu = intWeiShu + 1
Loop
Next j
Next i
strJI = ""
For intWeiShu = intJi To 1 Step -1
If JI(intWeiShu) <> 0 Then Exit For '去掉结果中的前导0
Next intWeiShu
intWeiShu = IIf(intWeiShu < 1, 1, intWeiShu)

For i = intWeiShu To 1 Step -1
strJI = strJI + Trim(Str(JI(i)))
Next i
Return strJI
End Function

Public Function JeiCheng(ByVal strShu As String) As String
Dim intI As Integer
Dim strTemp As String = "1"
For intI = 1 To CInt(strShu)
strTemp = ChengFa(strTemp, intI)
Next
Return strTemp
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Cursor = System.Windows.Forms.Cursors.WaitCursor
Label1.Text = JeiCheng("1000")
Me.Cursor = System.Windows.Forms.Cursors.Default
End Sub

1000!=402387260077093773543702433923003985719374864210714632543799910429938512398629020592044208486969404800479988610197196058631666872994808558901323829669944590997424504087073759918823627727188732519779505950995276120874975462497043601418278094646496291056393887437886487337119181045825783647849977012476632889835955735432513185323958463075557409114262417474349347553428646576611667797396668820291207379143853719588249808126867838374559731746136085379534524221586593201928090878297308431392844403281231558611036976801357304216168747609675871348312025478589320767169132448426236131412508780208000261683151027341827977704784635868170164365024153691398281264810213092761244896359928705114964975419909342221566832572080821333186116811553615836546984046708975602900950537616475847728421889679646244945160765353408198901385442487984959953319101723355556602139450399736280750137837615307127761926849034352625200015888535147331611702103968175921510907788019393178114194545257223865541461062892187960223838971476088506276862967146674697562911234082439208160153780889893964518263243671616762179168909779911903754031274622289988005195444414282012187361745992642956581746628302955570299024324153181617210465832036786906117260158783520751516284225540265170483304226143974286933061690897968482590125458327168226458066526769958652682272807075781391858178889652208164348344825993266043367660176999612831860788386150279465955131156552036093988180612138558600301435694527224206344631797460594682573103790084024432438465657245014402821885252470935190620929023136493273497565513958720559654228749774011413346962715422845862377387538230483865688976461927383814900140767310446640259899490222221765904339901886018566526485061799702356193897017860040811889729918311021171229845901641921068884387121855646124960798722908519296819372388642614839657382291123125024186649353143970137428531926649875337218940694281434118520158014123344828015051399694290153483077644569099073152433278288269864602789864321139083506217095002597389863554277196742822248757586765752344220207573630569498825087968928162753848863396909959826280956121450994871701244516461260379029309120889086942028510640182154399457156805941872748998094254742173582401063677404595741785160829230135358081840096996372524230560855903700624271243416909004153690105933983835777939410970027753472000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

依次算

不要紧的慢慢来哦。
晚上吃过了晚饭。准备好一壶水 一节电池或者更多。
开工了兄弟。
我也不知道要多少个白昼黑夜。
记住一句话:只要有恒心,那个什么也磨成针。
我精神支持你。

可以用斯特林公式估计,但是这是n的n次方级的

楼上用程序的不要装
你忘了运行的最大数问题.........

程序:溢出
手算:累死
估算:还有可能