プロが教えるわが家の防犯対策術!

高1レベルで100の階乗の求め方を教えてください

A 回答 (4件)

>高1レベルで100の階乗の求め方を教えてください



パソコンを買う。
そして計算する。
    • good
    • 1

「高1レベル」に何の意味があるのかわかりませんが, 「地道に計算する」という方法を排除するわけにはいくまい.

    • good
    • 0

100!=


9332621544394415268169923885626670049071596826438162146859296389
5217599993229915608941463976156518286253697920827223758251185210
916864000000000000000000000000
158桁ですかね・・・
まともに計算するのは無理かな・・・?
エクセルでも数値としては桁が大きすぎて持てないし。
でもエクセルで、文字列として表すことはできます。
以下のプログラムをエクセルのVBAにコピーして、シートで、
=F(100)とすれば文字列としてできます。
Function s1(a As String, b As String, c As Single) As String
If a = "" Then
If c = 0 Then s1 = "" Else s1 = c
Else
t = Val(Right(a, 1)) + Val(Right(b, 1)) + c
s1 = s1(Left(a, Len(a) - 1), Left(b, Len(b) - 1), Int(t / 10)) & (t Mod 10)
End If
End Function

Function s(a As String, b As String)
Dim aa As String
Dim bb As String
aa = a
bb = b
If Len(aa) > Len(bb) Then bb = String(Len(aa) - Len(bb), "0") & bb
If Len(aa) < Len(bb) Then aa = String(Len(bb) - Len(aa), "0") & aa
s = s1(aa, bb, 0)
End Function

Function d(a As String) As String
While Left(a, 1) = "0"
a = Right(a, Len(a) - 1)
Wend
If a = "" Then d = "0" Else d = a
End Function

Function m(a As String, b As String) As String
If b = "" Then m = "": Exit Function
For i = 1 To Val(Right(b, 1))
m = s(m, a)
Next i
m = d(s(m(a, Left(b, Len(b) - 1)) & "0", m))
End Function

Function F(n)
If n = 0 Then F = 1 Else F = m(Str(n), F(n - 1))
End Function

この回答への補足

求めるのは0の桁数でした・・・。すいません。

補足日時:2009/05/13 21:20
    • good
    • 2

>求めるのは0の桁数でした・・・。



 100!を素因数分解したとき、素数2の個数と 素数5の個数を数えてください。
 2つの個数のうち、少ない個数の数だけ0がつきます。
 (10=2×5 だから)

1) 素数2の個数
  2の倍数の個数: 50個
  4の倍数の個数: 25個
  8の倍数の個数: 12個
  16の倍数の個数: 6個
  32の倍数の個数: 3個
  64の倍数の個数: 1個 (+
-----------------
  素数2の個数 = 97個

2) 素数5の個数
  5の倍数の個数: 20個
  25の倍数の個数: 4個 (+
-----------------
  素数5の個数 = 24個
    • good
    • 4

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!