ここから本文です

c言語のmまたはnが13以上となる場合に正しい解を求めることができない、なぜなら、...

let********さん

2017/7/323:02:39

c言語のmまたはnが13以上となる場合に正しい解を求めることができない、なぜなら、13の階乗は6,227,020,800であり、この値はint型変数で扱うことのできる範囲をこえてしまっているからである。以下のプログラムを改

良しなるべく大きなmやnの値でも正しく解を求めることができるプログラムをおしえてください。しかし、変数はあくまでint型を用い、floatやdouble型は使用しない方法でお願いします
int add( int a, int b )
{
int i;
int d = ( b>0 ? 1 : -1 );
int n = ( b>0 ? b : -b );
for( i=0; i<n; ++i )
{ a += d; }

return a;
}

int mul( int a, int b )
{
int i;
int r = 0;
int n = ( b>0 ? b : -b );
for( i=0; i<n; ++i )
{ r = add( r, a ); }

return ( b>0 ? r : -r );
}

int fn( int kitten )
{
return ( kitten>1 ? mul( kitten, fn(kitten-1) ) : 1 );
}

閲覧数:
97
回答数:
1

違反報告

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

Hermitさん

2017/7/408:13:30

fn が、int を返す関数であるのなら無理だと思いますが。

表示も含めた一般的な手法だと、
1から始めて、5の倍数時(当然それまでに2の倍数が発生するので)
10 で割って 0 の個数を数えて最後にその数の 0 を付加するとか、

大きな数値が表現できる型を作って、それで計算させるとか

では無いでしょうか。

面倒なので、サンプル作る気にはなれませんが、
どちらにしても、どこを変えていいか、どの程度の大きさを想定するのか
の方針がわからないと、答えづらいと思います。

fn が、int を返す関数であるのがデフォルトなら、
どのみち範囲を超えるので無理だと思います。

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

  • 取り消す
  • キャンセル

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

この質問につけられたタグ

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

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

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

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

閉じる

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

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

閉じる