• ベストアンサー

階乗のプログラム!!

階乗を求めるプログラムを作りたいのですが、どうも上手くいきません・・・。下のプログラムを作ってみたのですが、エラーになってしまいます。どなたか教えてください、お願いします!! #include <stdio.h> void main(void) { int i,j; long a=1; for (i=1; i<=10; i++){ for(j=1 ;j <=i; j++){ a=a*j; } printf("%3d %ld \n",i,a); } }

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

  • ベストアンサー
  • akinori_s
  • ベストアンサー率60% (21/35)
回答No.2

これって 1~10までの階乗を出力するってプログラムですよね? 実際に階乗の計算を行ってるのは2つ目のforループで行っていると 思いますが、その前にaを初期化してない為に前に計算した階乗の値が 残ってしまってるからじゃないかと思います。 for (i=1; i<=10; i++){  a = 1; //←初期化  for(j=1 ;j <=i; j++){   a=a*j;  }  printf("%3d %ld \n",i,a); } もしくは... int num = 10; //求める階乗数 int a,i; for(i=1,a=1;i<=num;i++,a=a*i) printf("%3d %ld \n",i,a); こんな感じになると思います。

すると、全ての回答が全文表示されます。

その他の回答 (2)

noname#30871
noname#30871
回答No.3

 回答は他のかたがなさっているので、アドバイスと称して苦言を一つ。  プログラムが仕様通りの動作をしないとき、「どうも上手くいきません」「エラーになってしまいます」で片付けていたら、永久にプログラミングは上達しませんよ。  プログラムを書いてみたが、思い通りに動かない。それは、プログラミングでは当たり前です。むしろそれからが始まりです。「どうも上手くいきません」とは、具体的にどういう現象が起きるのでしょう。「エラーになってしまいます」とは、どんなエラーメッセージが出るのでしょう。得られる手がかりを駆使してバグの原因を絞り込んでいくのがプログラミングです。  また、エラーメッセージすら示さずに質問をするなんて、他人に対するものの聞き方も覚えてください。

すると、全ての回答が全文表示されます。
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

aの初期化のタイミングがおかしいのではないでしょうか。 各iについて出たaの値をそのまま(i+1)について使っていますから、 このままでは 1! 1!×2! 1!×2!×3!   : 1!×2!×3!×・・・10! を計算することになって、多分オーバーフローを起こします。 外側のforループと内側のforループの間で毎回 a=1 を実行すべきだと思います。

すると、全ての回答が全文表示されます。

関連するQ&A