- 締切済み
"n!"(階乗)の数字列の生成
ある"n"(数字)を入力すると、"n!"(階乗)通りの数字列を生成するプログラムを作りたいのですが、 どのような考え方でプログラムを作成すればよいのかわかりません。 例えば、"7"と入力すると 1,2,3,4,5,6,7 1,2,3,4,5,7,6 1,2,3,4,6,5,7 ・ ・ ・ 7,6,5,4,3,2,1 のように7!通りの数字列を出力されるようにしたいのです。 アドバイスを頂けないでしょうか。よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- graphaffine
- ベストアンサー率23% (55/232)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
関連するQ&A
- Nの階乗
この問題がどうすればいいのかまったくわかりません。 考え方を教えて下さい。 ------------------------------------------------ まず、プログラムの中で一つの整数N(1<=N<=100)を入力させる。そして、一桁ずつを一つの整数配列の別々の箱に入れる表現を用いて、Nの階乗を計算し、その結果を表示するプログラムを作れ。例えば1258をdat[4]=1, dat[3]=2, dat[2]=5, dat[1]=8と表す。アルゴリズムには、ループ(for文、while文、repeat文のいずれか)を用いなさい。
- ベストアンサー
- その他(プログラミング・開発)
- VB 2005においての0から12までの値nを入力し、nと階乗n!値を
VB 2005においての0から12までの値nを入力し、nと階乗n!値を表示させなさい。という問題が出ました。 色々調べてみたのですが、いまいち、ばらばらで要領を得ません。 プログラムに詳しい方どうか教えてくださいよろしくお願いします。
- ベストアンサー
- Visual Basic
- パソコンで階乗を計算
現在、fortran90を使って階乗を計算するプログラムを作っております。 プログラム内容は、(n !を求めえるプログラム) n=0 do i=1,100 n=n*i enddo このプログラムを実行すると、12!までは予想された値が得られるのですが、13!以降は電卓で計算した値と遙かに異なる値が得られました。 このプログラムは間違っているとは思えないですが、電卓の計算とパソコンの計算が異なる結果になった理由が分かりません。 どなたか、ヒントや参考情報だけでもいいので教えてください。 ちなみにパソコンによる計算結果は、 i n 1 1 2 2 3 6 4 24 5 120 6 720 7 5040 8 40320 9 362880 10 3628800 11 39916800 12 479001600 13 1932053504 14 1278945280 15 2004310016 16 2004189184 17 -288522240 18 -898433024 19 109641728 20 -2102132736 21 -1195114496 22 -522715136 23 862453760 24 -775946240 25 2076180480 26 -1853882368 27 1484783616 28 -1375731712 29 -1241513984 30 1409286144 31 738197504 32 -2147483648 33 -2147483648 34 0 35 0 36 0 36の階乗以降0です。 計算結果が正となるが、結果が違うモノ(例えば、13!や31!)は単精度で約10桁程度しか有効数字が得られないためであると思われるのですが、負になったり、0になる理由が分かりません。
- 締切済み
- その他(プログラミング・開発)
- C言語の、階乗を使うプログラムの問題を教えて下さい
C言語の、このプログラムを作るのが分かる方、教えて下さい。階乗を使う問題です。 「キーボードで整数aを入力するとn!>aとなるときの最小のnを出力するプログラムを作りなさい」という問題です。 分からず苦戦しています。 nをキーボードで入力してn!を求めるには #include<stdio.h> int main(void) { int kekka,n,i; printf("n=? \n"); scanf("%d",&n); kekka=1; for(i=1;i<=n;i++) { kekka=kekka*i; } printf("%d!は%dです。\n",n,kekka); return 0; } とすればいいのは自分で作れたのですが、問題にあるn!>aのプログラムが分からず困っています。 分かる方、お願いいたします
- ベストアンサー
- C・C++・C#
- 階乗の出力について
Cを勉強中の者です。再起コールを使った階乗計算の結果を出力するプログラムをつくったのですが、もし再起コール(関数 kaijyo)を使わずにfor文などを使って同じように、階乗計算を行いたい場合どのようにすればいいでしょうか? 以下がそのソースコードです。説明が不足であればまた付け加えますのでよろしくおねがいします。 #include <stdio.h> int kaijyo(int a); int main(void) { int a; a = kaijyo(6); printf("6! = %d\n", a); return 0; } int kaijyo(int n) { if(n == 1) return 1; else return n*kaijyo(n-1); /*これを使わずに6!の結果を出したい/* }
- ベストアンサー
- C・C++・C#
- 私は20年以上同居している人が最近とても怒りっぽいです。
- 彼の言葉に主語がないため、会話が途中で混乱してしまうことがあります。
- 彼は怒るとギャンブルをやりたがりますが、私には負けて自分を責めるような態度を取ります。
お礼
ありがとうございます。 このやり方だと、先頭が"1"の文字列のみ欲しいという場合にも対応できそうですね。
補足
nは9くらいまでを想定しています。 12!までしか扱えないということは知りませんでした。