设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 9447|回复: 20

[高1]求1*2*3*...*1000的值

[复制链接]
发表于 2005-3-26 05:37:00 | 显示全部楼层 |阅读模式
s=1*2*3*4*5*6*...*998*999*1000

s=?

要求精度要达到个位.最短代码者胜.[em05]
发表于 2005-3-27 02:14:00 | 显示全部楼层


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

  Dim i As Int16

  Dim j As Int16 = 0

  Dim n As Int16 = 0

  Dim part(300, 1) As Int64

  Dim r As String  Dim maxPart As Int16 = 1

  Dim maxNum As Int64 = 10000000000

  Dim maxWidth As Int16 = 10  '  Dim temp As Int16

  Try

   part(1, 0) = 1

   For i = 1 To CType(Me.TextBox1.Text, Int16)    For j = 1 To maxPart

     part(j, 0) *= i

    Next    For j = 1 To maxPart     If part(j, 0) > maxNum Then

      n = j + 1

      part(n, 0) = part(j, 0) \ maxNum + part(n, 0)

      part(n, 1) = maxWidth + part(j, 1)      part(j, 0) = part(j, 0) Mod maxNum

     End If

    Next

    If maxPart < n Then maxPart += 1

    n = 0

   Next  Catch ex As Exception

   MsgBox(ex.Message & " " & maxPart.ToString & " ")

  Finally

   r = ""

   Me.TextBox2.Text = ""

   For j = 1 To maxPart    r = part(j, 0).ToString

    r = "," & New String("0", 10 - r.Length) & r

    Me.TextBox2.Text = r & Me.TextBox2.Text

   Next

  End Try End Sub计算结果是:40238726,0077093773,5437024339,2300398571,9374864210,7146325437,9991042993,8512398629,0205920442,0848696940,4800479988,6101971960,5863166687,2994808558,9013238296,6994459099,7424504087,0737599188,2362772718,8732519779,5059509952,7612087497,5462497043,6014182780,9464649629,1056393887,4378864873,3711918104,5825783647,8499770124,7663288983,5955735432,5131853239,5846307555,7409114262,4174743493,4755342864,6576611667,7973966688,2029120737,9143853719,5882498081,2686783837,4559731746,1360853795,3452422158,6593201928,0908782973,0843139284,4403281231,5586110369,7680135730,4216168747,6096758713,4831202547,8589320767,1691324484,2623613141,2508780208,0002616831,5102734182,7977704784,6358681701,6436502415,3691398281,2648102130,9276124489,6359928705,1149649754,1990934222,1566832572,0808213331,8611681155,3615836546,9840467089,7560290095,0537616475,8477284218,8967964624,4945160765,3534081989,0138544248,7984959953,3191017233,5555660213,9450399736,2807501378,3761530712,7761926849,0343526252,0001588853,5147331611,7021039681,7592151090,7788019393,1781141945,4525722386,5541461062,8921879602,2383897147,6088506276,8629671466,7469756291,1234082439,2081601537,8088989396,4518263243,6716167621,7916890977,9911903754,0312746222,8998800519,5444414282,0121873617,4599264295,6581746628,3029555702,9902432415,3181617210,4658320367,8690611726,0158783520,7515162842,2554026517,0483304226,1439742869,3306169089,7968482590,1254583271,6822645806,6526769958,6526822728,0707578139,1858178889,6522081643,4834482599,3266043367,6601769996,1283186078,8386150279,4659551311,5655203609,3988180612,1385586003,0143569452,7224206344,6317974605,9468257310,3790084024,4324384656,5724501440,2821885252,4709351906,2092902313,6493273497,5655139587,2055965422,8749774011,4133469627,1542284586,2377387538,2304838656,8897646192,7383814900,1407673104,4664025989,9490222221,7659043399,0188601856,6526485061,7997023561,9389701786,0040811889,7299183110,2117122984,5901641921,0688843871,2185564612,4960798722,9085192968,1937238864,2614839657,3822911231,2502418664,9353143970,1374285319,2664987533,7218940694,2814341185,2015801412,3344828015,0513996942,9015348307,7644569099,0731524332,7828826986,4602789864,3211390835,0621709500,2597389863,5542771967,4282224875,7586765752,3442202075,7363056949,8825087968,9281627538,4886339690,9959826280,9561214509,9487170124,4516461260,3790293091,2088908694,2028510640,1821543994,5715680594,1872748998,0942547421,7358240106,3677404595,7417851608,2923013535,8081840096,9963725242,3056085590,3700624271,2434169090,0415369010,5933983835,7779394109,7002775347,2000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000,0000000000

点击这里给我发消息

发表于 2005-3-28 09:22:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2005-3-28 18:30:00 | 显示全部楼层
重发, 一个可以计算922,337,203的阶乘Private Sub NewSub()

  ' 计算大数 阶乘

  Dim i As Int16

  Dim j As Int16 = 0

  Dim partColl As New System.Collections.ArrayList(5)  '这里用动态数组

  Dim r As String  Dim maxPart As Int16 = 0

  Const maxNum As Int64 = 10000000000

  Const maxWidth As Int16 = 10 ' 这两个常数决定了可以计算多大数的阶乘,  = Int64.Maxvalue / maxNum  Try

   partColl.Add(1)

   For i = 1 To CType(Me.TextBox1.Text, Int16)

    For j = 0 To maxPart

     partColl.Item(j) *= i

    Next

    For j = 0 To maxPart

     If partColl(j) > maxNum Then

      If partColl.Count <= j + 1 Then

       partColl.Add(0)

      End If

      partColl.Item(j + 1) += partColl(j) \ maxNum

      partColl.Item(j) = partColl.Item(j) Mod maxNum

     End If

    Next

    maxPart = partColl.Count - 1

   Next

  Catch ex As Exception

   MsgBox(ex.Message & " " & maxPart.ToString & " ")

  Finally

   r = ""

   Me.TextBox2.Text = ""

   For j = 0 To partColl.Count - 1

    r = "," & New String("0", maxWidth - r.Length) & CType(partColl.Item(j), Int64).ToString

    Me.TextBox2.Text = r & Me.TextBox2.Text

   Next

   Me.Button1.Text = Me.TextBox2.Text.Replace(",", "").Length

  End Try

End Sub

点击这里给我发消息

发表于 2005-3-28 18:46:00 | 显示全部楼层
哇, 厉害!!我有些晕了
发表于 2005-3-30 06:13:00 | 显示全部楼层


下面的程序效率不是很高,但超大整数乘法、加法的函数还是比较实用

Public Function factorial(num As Integer) As String

    factorial = "1"

    For num = num To 1 Step -1

        factorial = strMult(factorial, Trim(Str(num)))

    Next

End Function

'1000 的阶乘=40238726007709377354370243392300398571937...用时6分钟

'超大整数乘法 (需调用下面的strAdd、strPlus自定义函数)

Public Function strMult(str1 As String, str2 As String) As String

    Dim i As Integer

    If Len(str2) = 1 Then

        strMult = IIf(str2 = "0", "", str1)

        For i = 1 To Val(str2) - 1

            strMult = strAdd(strMult, str1)

        Next

    Else

        strMult = strAdd(strMult(str1, Right(str2, 1)), strMult(str1 & "0", Left(str2, Len(str2) - 1)))

    End If

End Function

'超大整数加法 (需调用下面的strPlus自定义函数)

Public Function strAdd(str1 As String, str2 As String) As String

    If Len(str1) < Len(str2) Then

        strAdd = strAdd(str2, str1)

    Else

        Dim num As Long

        strAdd = strPlus(str1, "", Val(Right(str2, 1)))

        For num = 1 To Len(str2) - 1

            strAdd = strPlus(Left(strAdd, Len(strAdd) - num), Right(strAdd, num), Val(Mid(str2, Len(str2) - num, 1)))

        Next

    End If

End Function

Public Function strPlus(str1 As String, str2 As String, num As Integer) As String

    If Len(str1) = 1 Then

        strPlus = (Val(str1) + num) & str2

    Else

        num = Val(Right(str1, 1)) + num

        If num < 10 Then

            strPlus = Left(str1, Len(str1) - 1) & num & str2

        Else

            strPlus = strPlus(Left(str1, Len(str1) - 1), (num Mod 10) & str2, 1)

        End If

    End If

End Function

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2005-3-30 07:29:00 | 显示全部楼层
哇,开了眼界
发表于 2005-4-26 23:47:00 | 显示全部楼层
开了眼界,,对于 这种运算,我比较头痛。。。学习
发表于 2005-5-6 03:49:00 | 显示全部楼层
我的妈呀!
发表于 2005-8-3 19:08:00 | 显示全部楼层
楼主这是用VB.NET写的吧

[此贴子已经被作者于2005-8-5 12:59:50编辑过]

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-18 16:54 , Processed in 0.119562 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表