C言語でuint64より大きな数で階乗を求めるために

2020-01-30 18:00

Ruby では C言語の型を超える数字を扱えるのに、どうして C言語ではできないのだろう、と結構長いこと思っておりました。しかしながら、配列(という名のポインタ)を上手に扱えば巨大数でも計算機のメモリに余裕がある限りできるのだ、という記事「配列の応用:大きな整数の計算」(慶應義塾大学)を見つけてしまったので、良いチャンスだと思いチャレンジすることにしました。この記事では、前記のページの【練習】の項目もやってみたのでインターネット上でも公開することにします。

コードの改変について

サンプルコードとは若干異なります。理由はオリジナルのコードと自分の想定した数値が異なったからです。しかしながら、コードのコアなアルゴリズムから逸脱していないと思っております。

おわりに

再帰を用いて階乗を求める式だと思っていたので、ループで階乗を求めるアルゴリズムだと気がつくのに小一時間かかりました。機会があれば、再帰で同じアルゴリズムを使う計算をしてみようと思います。

※ 紙面の都合により、タイトルには ‘uint64’ という表記を用いています。しかしながら C言語なので本来ならば ‘unsigned long long’ と表記すべきでした。申し訳ありません。

関連記事