如何读取大量数字

How read large amount of numbers?

本文关键字:数字 读取 何读取      更新时间:2023-10-16

我需要在 C/C++ 中读取大量(最多 2^24 个)大数字(每个最多 22 个字符)。如何执行这样的读取?数字用空格分隔,我必须阅读所有内容,直到换行。使用 getch() 并填充数组,或者有一些更智能的解决方案?

这些"数字"是什么?如果它们是整数,则 C 中通常没有对如此大的数字的内置支持;您将需要一些库来获得"Bignum"支持。如果它们是浮点数,您可以尝试double但精度可能不够。

如果不了解更多数据,就很难更具体,请考虑在问题中显示一些数字,否则它非常模糊。

如果您的读取是单线程的,则可以使用 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 成本。

首先,

您需要一个适当的类型来存储整数,因为它大于 64 位 int,您可能需要一个结构化类型。您可以编写自己的库或使用库,例如

http://gmplib.org/

阅读它的文档以供使用。

然后,您需要明确要对数字做什么:汇总,转换,搜索或转移?知道后,您可以对用于整数的数据类型进行操作。