1000×999×998×997×996…5×4×3×2×1怎么算?

猛龙过江佛祖烧香2022-10-04 11:39:541条回答

已提交,审核后显示!提交回复

共1条回复
jbmrh 共回答了23个问题 | 采纳率91.3%
不限位数和长度的乘法,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
1年前

相关推荐

1000×999×998×997×996…5×4×3×2×1得到的积的尾数有多少个0?
龙猫5201年前1
lilysjz 共回答了23个问题 | 采纳率95.7%
1到1000中能够相乘变为10的倍数的数可以分为下面几类数:
1)能被5整除而不能被25整除(共有1000/5-1000/25=160)
2)能被25整除而不能被125整除(共有1000/25-1000/125=32)
3)能被125整除而不能被625整除(共有1000/125-[1000/625]=7)
4)能被625整除(625一个数)
而从1到1000共有偶数500个,足够5,25,50,125,625,500乘以若干个2(包括零个)之后成为10(一个零),100(两个零),1000(三个零),10000(四个零).
因而零的个数可以计算出来
从第一类算起,应该是160*1+32*2+7*3+1*4应该是249个零.