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 回答