如何阅读大量的数字?

时间:2012-10-08 13:07:31

标签: c++ c

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

3 个答案:

答案 0 :(得分:4)

这些“数字”是什么?如果它们是整数,那么对于如此大的数字,C中通常没有内置支持;你需要一些图书馆来支持“bignum”。如果它们是浮点数,您可以尝试double,但精度可能不够。

如果不了解更多有关您的数据的话,很难更具体,考虑显示问题中的一些数字,因为它非常模糊。

答案 1 :(得分: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成本。

答案 2 :(得分:0)

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

http://gmplib.org/

阅读文档以供使用。

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