ここから本文です

多倍長整数型についての質問です。 C言語で非常に桁数の多い整数を取り扱う場合ど...

kim********さん

2018/9/1311:43:00

多倍長整数型についての質問です。
C言語で非常に桁数の多い整数を取り扱う場合どのようにすれば良いのでしょう。
そのような型はあるのでしょうか?

調べたところC++にはint 1024などという型があるようだったのですがC言語でも使えるでしょうか。

例えば、(100)!を3で割ったあまりなどをまずオーバーフローを起こさずに(100)!を計算しその後3で割るといった操作をして表示したいのですがどのようにすればよいでしょうか。

簡単なら具体的なサンプルプログラムも示していただけるとありがたいです。

ご回答のほどよろしくお願いいたします。

閲覧数:
113
回答数:
3
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

bla********さん

2018/9/1410:15:46

多倍長整数演算ライブラリを使うのが一般的です.
良く使われている代表的なものが GMP (GNU MP) です.
gmplib.org/

GMP を解説したサイトは以下など
sehermitage.web.fc2.com/etc/gmp.html

GMP 以外にもライブラリは色々あります.
ja.wikipedia.org/wiki/%E4%BB%BB%E6%84%8F%E7%B2%BE%E5%BA%A6%E6%BC%94%E7%AE%97

また,コマンドとして電卓的にも使えるものに PARI/GP があります.ちょっとした計算ならプログラムを作らなくても計算できます.かなり高度な数学パッケージです(C言語ライブラリとしても使えます).
pari.math.u-bordeaux.fr/

この質問は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

bul********さん

2018/9/1321:20:59

C++ にも多倍長演算のライブラリーは標準では用意されていません。
boost を使えば boost::multiprecision がつかえますが、当然 C言語では無理です。

100! は 3 の倍数ですから、計算するまでもないですね。
また、階乗を n で割ったあまりは多倍長演算を使わなくても、求められます。
例えば次のようなプログラムになります。
#include <stdio.h>

// n の階乗を mで割った余りを求める
void fact_mod(int n, int m)
{
int f = 1;

for (int i = 1; i <= n; ++i) {
f = f * i % m;
printf("fact(%3d) %% %d = %3d\n", i, m, f);
}
}

int main(void)
{
fact_mod(100, 317);

return 0;
}

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

has********さん

2018/9/1315:33:01

小学校の10進法の加減乗除の筆算と同じ。
256進法の計算を行う仕組みを作成して、unsigned charの配列を一つの整数として扱うようにすれば実現できる。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる