質問: 【C言語の多倍長演算について】 自作で階乗の値を多倍長演算で求めるプログラムをC言語で作成したのですが、そのプログラムで100000!の値を求めたところ、(1)のようになりました。ですが、この出力には10進数には存在しない「-」という記号が不規則的に組み込まれています。このように出力されてしまうのは何が問題なのでしょうか。作成したプログラムは、100000程大きい数字でなければ正確な値が返されます。また、この多倍長演算を行うにあたって、使用している変数の型はint型です。もしかしたらint型が32bitであるために不具合を起こしているのかもしれないと考えておりますが、なぜ「-」が出力されるのかという問題がまだ解決できておりませんので、質問させていただきました。詳しくは添付画像に載っているプログラムを参照してください(見にくいかもしれません...)。 今回作成した自作プログラムは以下のベストアンサー様の回答を参考にして作りましたので、細かい仕様は変更しておりますが、根本的な仕組みは変更しておりません。 URL: 参考に、(1)は自作プログラムによる出力結果の上500桁, (2)は正確な値の上500桁となっております。また、出力結果の数字上500桁の後の桁数は、(100000!の桁数, 下位に連続する0の個数)となっております。 (1) 「091510998016096536524768916032-14045-3283-5780717490-3848-58973500750658351585-5693985601-3035329241-42352-85996-61748729434508497956-2721524639-486935492921833-915065565454598-598634191683677-9885055785-83657049791743125510-4586529779-4915988291-52621-1360-74061-72416-2733596549-596005489156538-81358-6067780560-6022-6431121477-4699-72089-1862787621-36562-862260048380262-21377-819184623067053005814835218309003148221331349-4818211427-1576-7864714228-213984877532534-41977-45519-51521-5577427377-45...」(430899桁, 6455桁) (2) 「28242294079603478742934215780245355184774949260912248505789180865429779509010630178725517714138311636107136117373619629514749961831239180227260734090938324220055569688667840380377379444961268380147875111966906386044926144538111370090160766866405407170565952261298041958356778909047541512871140836924251535293096260672271038744246088635454363982931747761775532621851126474855864918180381519877161219681514129902304463824068896508357500229649939642364256635271614935207801331202943393059481996043539694...」(456574桁, 24999桁) 添付画像のプログラムについて補足ですが、関数factrial_multiple_length_arithmeticの引数numは、今回でいう100000の事で、引数modeは、ファイルに出力するのかstdoutに出力するのかを選択するための0か1の数字です。0のときはstdoutに計算結果が出力され、1のときはtxtファイルに出力されます。添付画像にはmain関数がありませんが、そこは問題点が無いと判断いたしましたので載せておりません。また実行環境はRepl.itであり、添付画像のプログラムはVSCodeに貼り付けただけのものとなっております。 長い質問文となりましたが、是非ご回答よろしくお願いいたします。
回答: (あっぷるぱいさん) >なぜ「-」が出力されるのかという問題が 配列がint型で1要素あたり10桁にしてるのでは? int型なら最大数は2147483647ですから1要素あたり9桁が限界です。