C言語で、入力されたnについてのn!を求めるプログラムを書きました。
#include<stdio.h>
int main()
{
int total=1,i,n;
scanf("%d",&n);
for(i=1;i<=n;i++){
total*=i;
}
printf("%d",total);
}
しかし、このままだとn=13くらいからオーバーフローしてしまって、n=100やn=10000といった大きな数の場合のn!が求められませんよね?
万進法という方法を使って、10000未満の数を配列の要素に割り当てる(説明が正しいかわかりませんが…)と、うまくいくと聞きました。
万進法とはどのようなものでしょうか?やり方を教えてください。
また、C言語での、このプログラムの一例もできれば教えてください。
ですが、今一番知りたいのはどういう手順でプログラムを書けばいいのかということですので、そちらの方を詳しく教えてください。
No.1ベストアンサー
- 回答日時:
No.2
- 回答日時:
自分で万進法を使った計算を書く方法は#1さんがリンクを貼っているのでそちらでみてください。
自分で書く必然性がない場合はThe GNU Multiple Precision Arithmetic Library (http://gmplib.org/) というライブラリーを使って書くのが普通です。
参考までに、22nekonekoさんがお書きになったプログラムはこう書けます。
#include <stdio.h>
#include <stdlib.h>
#include <gmp.h>
int
main(void)
{
mpz_t total;
long int i, n;
mpz_init(total);
mpz_set_si(total, 1);
printf("factorial of :");
scanf("%ld", &n);
for (i = 1; i <= n; i++) {
mpz_mul_si(total, total, i);
}
gmp_printf("factorial(%u) = %Zd\n", n, total);
mpz_clear(total);
return EXIT_SUCCESS;
}
コンパイルは次のようなコマンドで行います。
% gcc factorial.c -lgmp -Lgmpのライブラリがあるディレクトリ -Igmpのヘッダファイルがあるディレクトリ
ちなみに、gmpはRSA暗号の計算などで使われていたりします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストカーソル位置の取得
-
printf で二進表示を行いたい。
-
プログラミング C言語 課題でプ...
-
wsprintfの書式制御文字列につ...
-
【C言語教えてください】sin波...
-
%P と %X の違い
-
コンパイルエラーについて
-
既約分数の表示プログラム
-
プログラムの修正お願いします。
-
cshの文字列操作(0埋め)
-
C言語での数字の花形表示
-
printf( " %2d", p * q );
-
再帰処理 変換
-
プログラミングの問題です。 C+...
-
(C言語)西暦年月日を入力して...
-
ホームページをC言語で作りたい...
-
C言語に関する質問です
-
入力したお金の金額からお札の...
-
C言語で連立一次方程式
-
C言語 この問題が分かりません...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コンパイルエラーについて
-
printf で二進表示を行いたい。
-
c言語でAからZまでを表示する...
-
テキストカーソル位置の取得
-
4の倍数を論理演算で表す。。
-
cshの文字列操作(0埋め)
-
【C言語教えてください】sin波...
-
10個出力で改行したいのですが...
-
wsprintfの書式制御文字列につ...
-
error C2143: 構文エラー : ';'...
-
printfの出力内の文字をdefine...
-
%P と %X の違い
-
C言語
-
strcmp
-
(C言語)めちゃくちゃな値にな...
-
コマンドラインに出力した文字...
-
スレッドとメッセージキューに...
-
printf( " %2d", p * q );
-
Visual Sutdio 2017 でのC言語...
-
defineで定数が置き換えられな...
おすすめ情報