5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

■■C++で大きな数を作るスレ■■

1 :デフォルトの名無しさん:2009/03/24(火) 20:27:50
C++ で大きな数を返すプログラムを作るスレです。
以下のプロトタイプの関数の戻り値で出来るだけ大きな数を返すものを作りましょう。

int main();

●ルール
最大でも1スレに収まる範囲とし、
1スレで完結したプログラムとしてください。
文字数も書いてください

●言語仕様
言語は C++ 2003 準拠とします
int と float は十分な精度があるとします
メモリは十分にあるとします
実行時間は問わないこととします

機種依存、コンパイラ依存の値が返るプログラムは不可
プリプロセッサ、ライブラリの使用は不可

●文字数カウントルール
動作上不要なコメント、スペース、タブ、改行は文字数に含めない
言語上必要なスペース、タブ、改行はカウントする(改行は1文字とする)


2 :デフォルトの名無しさん:2009/03/24(火) 20:29:33
ダメな例
int main(){ return sizeof(int); }           // 環境依存
int main(){ return (unsigned int)-1/2; }    // 環境依存
int main(){ return 'z'; }               // 環境依存
int main(){ return 1.0/0.0; }            // 環境依存
int main(){ int a = 9; return a <<= a <<= a; }  // 未定義動作
int main(){ int a = 9; return ++a * ++a; }     // 未定義動作
int main(){ quit(9) }                // main の戻り値じゃない、ライブラリ使用不可
int main(){ while(1) printf("9"); }        // main の戻り値じゃない、ライブラリ使用不可
int main(){ return 1.0/【>>1の知能指数】; }  // ネタとしてもいまいち
int main(){ return 【このスレでの最大値】+1 ; }    // ネタとしてもいまいち

小さいものの例
int main(){return 9;} // 21文字
int main(){return 99;} // 22文字
int main(){return 999;} // 23文字
int main(){return 9999;} // 24文字
int main(){return 9<<99;} // 25文字

ちょっと大きい数の例 (50文字)
int main()
{
  int n=99,m=n;
  while(m--)
    n<<=n;
  return n;
}


3 :デフォルトの名無しさん:2009/03/24(火) 21:01:23
>>言語は C++ 2003 準拠とします
その自信は何処から?
何で、言語は C++ 2003 準拠とします ?
環境依存不可としながら、糞スレ立てるな

4 :デフォルトの名無しさん:2009/03/24(火) 21:15:03
>>3
もしかして Visual C++ 2003 のことだと思ったのかな?
ISO/IEC 14882:2003 のことだよ。


5 :デフォルトの名無しさん:2009/03/24(火) 21:23:32
>>1スレで完結したプログラム!?

6 :デフォルトの名無しさん:2009/03/24(火) 21:26:46
まちがった。

最大でも1レスに収まる範囲とし、
1レスで完結したプログラムとしてください。


7 :デフォルトの名無しさん:2009/03/24(火) 22:55:48
1レスで完結したスレ

8 :デフォルトの名無しさん:2009/03/24(火) 23:05:08
はいはい かちこい かちこい

9 :デフォルトの名無しさん:2009/03/24(火) 23:33:37
とりあえず、ベタなところから行っとくか。(94文字)

int a(int m,int n){return (m)?(n)?a(m-1,a(m,n-1)):a(m-1,1):n+1;}
int main(){return a(9,9);}


10 :デフォルトの名無しさん:2009/03/25(水) 01:33:48
int main(){int a,b;for(a=b;a<++b;a=b);return a;}

48文字。常にint型で表現可能な最大値を返す。


11 :デフォルトの名無しさん:2009/03/25(水) 02:05:07
int main(){int a,b;for(;(a=b)<++b;);return a;}
>10 をショートコーディング 46文字

12 :デフォルトの名無しさん:2009/03/25(水) 02:13:11
int main(){int i=0;for(;++i>0;);return i-1;}
普通にやったら、11より短くなった。
44文字 ついでにsageわすれる

13 :デフォルトの名無しさん:2009/03/25(水) 02:21:11
int main(){int a;for(;a<a+1;a++);return a;}

43文字。アイディアは>>10と同じ。


14 :デフォルトの名無しさん:2009/03/25(水) 02:34:23
int main(int x){return(x<x+1)?main(x+1):x;}

43文字。無理やり再起を使ってみた。


15 :デフォルトの名無しさん:2009/03/25(水) 02:42:58
int main(){int a;for(;a+1>--a;);return a;}
>13
をヒントにしたが、既に原型をとどめていない。
しかも、コンパイラ依存かな。
42文字
main()再帰もやりたかったけどプロトタイプ宣言されてたからなぁ。

16 :デフォルトの名無しさん:2009/03/25(水) 03:06:07
int main(){int i=0;for(;--i<0;);return i;}
>15作った後に>12を見直したら
これでいいことがわかった。
42文字

17 :デフォルトの名無しさん:2009/03/25(水) 03:35:07
int main(){return(1<<sizeof(int)*8-1)-1;}
1Byteが、8bitじゃないですよね。41文字。
「char型は、1である」だっけ、これ名言だもんな。

18 :デフォルトの名無しさん:2009/03/25(水) 04:50:07
BigNumberをム板住民で実装するスレかと思ったら違うのか

19 :デフォルトの名無しさん:2009/03/25(水) 08:08:44
>>9
いきなりそんなとてつもなく大きな数が出てくるとは....

>>10-13 >>15-17
C++規格上はオーバーフロー、アンダーフロー時の値は不定で、
特殊なマシンだとintの値の1個が無効値を表すものがあるので上手く動かない場合がある
多くのコンパイラの場合に動作すれば良いなら、>>2 のダメな例の2個目の方が短くて同じ値を返す

>>14
プロトタイプが
int main();
だからmainの引数は使っちゃダメだよ


20 :デフォルトの名無しさん:2009/03/25(水) 08:10:28
>>1 の仕様だとintに上限が無いから >>10 は無理じゃないか?

21 :デフォルトの名無しさん:2009/03/25(水) 14:33:42
int main(){int i=8;float f=9e+9;for(;f>0;f-=1e-9)i*=i;return i;}
intに上限が無いと聞きまして、64文字。
いくらになるかは知らない。シフトしたらぐはっ。

22 :デフォルトの名無しさん:2009/03/25(水) 18:24:08
int main(){return 1e+9;} // 24文字
int main(){return 1e+99;} // 25文字


23 :デフォルトの名無しさん:2009/03/25(水) 18:33:36
>>22
eまたはE表現は、double型なので、int型にキャストしてやる必要があるのではないかしらん。
C言語なら暗黙でやってくれると思うけど、C++ですから。static_cast<int>()

24 :デフォルトの名無しさん:2009/03/25(水) 19:15:34
C++にもその暗黙の型変換あるぜ

7 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)