質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

4623閲覧

C言語で階乗を表示するプログラム

takumitakumi

総合スコア9

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1グッド

1クリップ

投稿2019/07/07 10:33

C言語で入力した値の階乗を表示するプログラムを書きましたが、うまくいきません。

#include <stdio.h>

int main()
{

int x = 1; int i; puts("自然数xを入力してください。"); scanf("%d",&x); for(i = 1;i <= x; ++i){ x = x * i; }; printf("xの階乗は%dです。",x); return 0;

}

例えば、xに5を代入して出力すると、xの階乗は-1899959296です。となり、正確な値が表示されません。
何がいけないのかご教授いただけると嬉しいです。よろしくお願いします。

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

少し分かりづらいですが、ループの条件部が不適です。

C

for(i = 1;i <= x; ++i){

xの値はループ内で更新されますから、i <= x の x の値は固定されません。
次のように別の変数を用意してやると良いでしょう。

C

1int ans = x; 2for(i = 1; i <= x; ++i) { 3 ループ内ではansの値を更新していく

投稿2019/07/07 10:41

LouiS0616

総合スコア35676

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takumitakumi

2019/07/07 10:58

素早い回答ありがとうございました。 納得しました。
guest

0

変数は i と x だけをつかって書いてみました。

c

1#include <stdio.h> 2 3int main() { 4 int x; 5 puts("自然数xを入力してください。"); 6 scanf("%d",&x); 7 if (x > 0) { 8 printf("%d", x); 9 for (int i = x - 1; i >= 1; --i) { 10 x *= i; 11 }; 12 printf("の階乗は%dです。\n", x); 13 } 14 return 0; 15}

実行例
イメージ説明

投稿2019/07/07 13:44

katoy

総合スコア22328

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

i <= x でiよりxの増加の方が大きくなっています。
「これ止まるのか?」とおもいましあたが、xがあまりに大きくなったため、xが負になって止まったのでしょう。

正しいやり方をしても、intの持ち得る値には限界がありますので、その限界を越えた場合は正しい答えは出ません。

投稿2019/07/07 13:12

myoon

総合スコア100

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問