キーボードから整数nを読み込み、
nの階上 n!=1×2×3×…n
を求めて表示させるプログラムを求めたいのですが、よくわかりません。
あと条件に0以下または13以上の場合は再入力するみたいです。
nの階乗を求めるプログラム
Re:nの階乗を求めるプログラム
階乗のプログラムはウェブ上にいくらでも載ってると思います。その中の1つを拝借
0以上の階乗計算プログラムのようですが13以下の条件はどっかにいれてください。これが実行できるかは
試してないのでわかりません。
#include <stdio.h> #include <stdlib.h> #define ARRAY_SIZE 1000 #define SUPREMUM 10000 int main(void) { int i, j, n, x, amari, p = 0, sho = 0; static int kekka[ARRAY_SIZE]; do { printf("0以上の数を入力:"); scanf("%d",&n); } while(n < 0); kekka[0] = 1; for(i = 0; i < n; i++) { for(j = 0; j <= p; j++) { x = kekka[j] * (i + 1) + sho; sho = x / SUPREMUM; amari = x % SUPREMUM; kekka[j] = amari; if(sho > 0 && p == j) { p++; } } } for(i = p, j = 1; i >= 0; i--,j++) { if(i == p) { printf("%4d",kekka); } else { printf("%04d",kekka); if( (j % 10) == 0 ) { printf("\n"); } } } printf("\n"); return 0; }
0以上の階乗計算プログラムのようですが13以下の条件はどっかにいれてください。これが実行できるかは
試してないのでわかりません。
Re:nの階乗を求めるプログラム
いつもいうことですが、キーボードからの読み込みを行うための一般的な方法はありません。
とはいえ、エディタならキーボードから読み込んでくれそうなので、次のようにしてもよいでしょう。
とはいえ、エディタならキーボードから読み込んでくれそうなので、次のようにしてもよいでしょう。
#include <iostream> #include <boost/static_assert.hpp> template <int n> struct factorial_helper { static const int value = n * factorial_helper<n - 1>::value; }; template <> struct factorial_helper<0> { static const int value = 1; }; template <int n> struct factorial { BOOST_STATIC_ASSERT(0 < n && n < 13); static const int value = factorial_helper<n>::value; }; int main() { const int n = /* ←に好きな整数をキーボードで入力すること! */; std::cout << factorial<n>::value << std::endl; return 0; }こんなことを書くとまた怒られそうですが...。
Re:nの階乗を求めるプログラム
段階で考えましょう。但し、キーボード入力は標準入力と読みかえています。
①標準入力から数字を読み取る。
解説:scanfで良いと思いますよ。scanf("%d",&hoge);
②0以下か13以上なら繰り返し
解説:while文かfor文かdo-while文。
while(1){
//処理
if(hoge>1 && hoge<12)
break;
}
③階乗の計算
解説:while文。
fact=1;
while(hoge)fact*=hoge--;
④表示
解説:printfです。
printf("%d\n",hoge);
こんなもんですかね。
①標準入力から数字を読み取る。
解説:scanfで良いと思いますよ。scanf("%d",&hoge);
②0以下か13以上なら繰り返し
解説:while文かfor文かdo-while文。
while(1){
//処理
if(hoge>1 && hoge<12)
break;
}
③階乗の計算
解説:while文。
fact=1;
while(hoge)fact*=hoge--;
④表示
解説:printfです。
printf("%d\n",hoge);
こんなもんですかね。
Re:nの階乗を求めるプログラム
「よくわかりません」という質問は回答に困る場合が多いです。
質問の仕方がわからないときは、規約をよくよんで、規約にそって質問して下さい。
自分が今何処までわかっているか、書き、わかるところからアドバイス受けましょう。
質問の仕方がわからないときは、規約をよくよんで、規約にそって質問して下さい。
自分が今何処までわかっているか、書き、わかるところからアドバイス受けましょう。
Re:nの階乗を求めるプログラム
階乗は、再帰的関数の呼び出しの原理を理解する為の例題で時折見かけますね。
と言うわけで、再帰的な関数でやってみます。
以上です。
個人的に再帰は、パズルゲームで隣の色が同じかどうかを調べる時に非常に役に立ちました。(ぷよぷよ系)
あと、再入力の処理はあえて書いていません。
main関数の値を入力する部分に、do文などを実装するといいでしょう。
(何のことか分からない場合は、もう一度参考書等を読み返すと効率的に学習できると思います。)
と言うわけで、再帰的な関数でやってみます。
------------------------------------------------- #include<stdio.h> int saiki(int n)/*再帰で階乗を求める*/ { if(n > 0) return(n * saiki(n - 1)); else return(1); } int main(void) { int t; scanf("%d",&t); /*値を入力する*/ printf("%d",saiki(t));/*値の階乗を表示*/ return(0); } ----------------------------------------------------
以上です。
個人的に再帰は、パズルゲームで隣の色が同じかどうかを調べる時に非常に役に立ちました。(ぷよぷよ系)
あと、再入力の処理はあえて書いていません。
main関数の値を入力する部分に、do文などを実装するといいでしょう。
(何のことか分からない場合は、もう一度参考書等を読み返すと効率的に学習できると思います。)