4

C/C++ で大量 (最大 2^24) の大きな数値 (それぞれ最大 22 文字) を読み取る必要があります。そのような読み取りを実行する方法は?数字はスペースで区切られており、改行まですべて読む必要があります。getch() を使用して配列を埋めるか、よりスマートな解決策がありますか?

4

3 に答える 3

4

これらの「数字」は何ですか?それらが整数の場合、通常、C にはそのような大きな数に対する組み込みサポートはありません。「bignum」をサポートするためのライブラリが必要になります。それらが浮動小数点の場合は試すことができますdoubleが、精度はおそらく十分ではありません。

データについて詳しく知ることなく、より具体的にすることは困難です。質問にいくつかの数値を表示することを検討してください。そうしないと、非常に曖昧になります。

于 2012-10-08T13:10:15.403 に答える
2

読み取りがシングルスレッドの場合はgetchar_unlocked()、 を使用できます。これにより、操作ごとにストリームをロックするオーバーヘッドが回避されます。文字ごとに移動し、数を累積して、スペースを待ちます。スペースが表示されたら、数値を保存し、現在の値をゼロにします。

int *data = new int[MAX_LEN];
int *ptr = data;
int ch;
*ptr = 0;
while ((ch = getchar_unlocked()) != '\n') {
    if (ch == ' ') {
        ptr++;
        *ptr = 0;
    } else {
        *ptr = (*ptr *10) + (ch -'0');
    }
}

もちろん、このフラグメントはエラーチェックなどの「重要でない」ものを無視しますが、入力が「サニタイズ」されていれば問題ありません。たとえば、このようなものを使用して、ACM オンライン ジャッジで I/O コストを節約できます。

于 2012-10-08T13:14:48.003 に答える
0

まず、整数を格納するための適切な型が必要です。これは 64 ビットの int よりも大きいため、おそらく構造化型が必要になるでしょう。独自に作成するか、次のようなライブラリを使用できます。

http://gmplib.org/

使用方法については、そのドキュメントをお読みください。

次に、その数値で何をしたいのかを明確にする必要があります: 合計、変換、検索、または転送? わかったら、整数に使用したデータ型を操作できます。

于 2012-10-08T13:25:28.780 に答える