• ベストアンサー

Nの階乗

この問題がどうすればいいのかまったくわかりません。 考え方を教えて下さい。 ------------------------------------------------ まず、プログラムの中で一つの整数N(1<=N<=100)を入力させる。そして、一桁ずつを一つの整数配列の別々の箱に入れる表現を用いて、Nの階乗を計算し、その結果を表示するプログラムを作れ。例えば1258をdat[4]=1, dat[3]=2, dat[2]=5, dat[1]=8と表す。アルゴリズムには、ループ(for文、while文、repeat文のいずれか)を用いなさい。

質問者が選んだベストアンサー

  • ベストアンサー
  • nitscape
  • ベストアンサー率30% (275/909)
回答No.2

同じような考え方で解く方法が過去にいくつかあります。ソースもありますので参考にどうぞ。

参考URL:
http://www.okweb.ne.jp/kotaeru.php3?q=429203,http://www.okweb.ne.jp/kotaeru.php3?q=92562

その他の回答 (2)

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.3

階乗を求めるわけですから、掛け算だけを考えればいいわけですね。 この場合、配列に一桁ずつ値を入れて、それぞれ計算しろということなので、紙の上で「筆算」をするのを思い浮かべるとわかりやすいと思います。 例えば、1528×3の計算を筆算するとき、 1528    3 --------   24   6 15 3 -------- 4584 という風になると思います。 3×8=24 3×2=6 3×5=15 3×1=3 という風にそれぞれ掛けたあと、足し算をして繰り上がりの部分を計算する。 ……というのが大まかな考え方です。 ポイントは「一桁ずつ掛ける」ことと「掛けた後の繰り上がりをうまく調整する」ことですね。

  • 12m24
  • ベストアンサー率23% (193/817)
回答No.1

 私も以前100桁の数を無理やり扱ったことがあります。  具体的には、ずべてひと桁の計算に分解できるようにする必要があります。計算方法としては、 ・160個の16bit整数型(short intなど)配列を作る。 ・配列の一番初めに1を入れる。 ・普通に掛け算させる。 ・一桁かける2桁は、最大でも3桁にしかならないので、n番目の計算で100の桁があればn+2番目にその数をいれて掛け算した値から100の桁をなくす ・同様に10の桁ならn+1番目に入れて10の桁を消す・これで一桁になる。 ・これをひたすらループさせて計算結果を出します。 オーバーフローを起こすようなら、配列の個数を増やします。

関連するQ&A

専門家に質問してみよう