重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

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

A 回答 (3件)

同じような考え方で解く方法が過去にいくつかあります。

ソースもありますので参考にどうぞ。

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=429203,htt …
    • good
    • 0

階乗を求めるわけですから、掛け算だけを考えればいいわけですね。


この場合、配列に一桁ずつ値を入れて、それぞれ計算しろということなので、紙の上で「筆算」をするのを思い浮かべるとわかりやすいと思います。

例えば、1528×3の計算を筆算するとき、
1528
   3
--------
  24
  6
15

--------
4584
という風になると思います。
3×8=24
3×2=6
3×5=15
3×1=3
という風にそれぞれ掛けたあと、足し算をして繰り上がりの部分を計算する。

……というのが大まかな考え方です。
ポイントは「一桁ずつ掛ける」ことと「掛けた後の繰り上がりをうまく調整する」ことですね。
    • good
    • 0

 私も以前100桁の数を無理やり扱ったことがあります。


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

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