繁体   English   中英

如何读取大量数字?

[英]How read large amount of numbers?

我需要在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/

阅读其文档以供使用。

然后,您需要弄清楚数字的用途:总结,转换,搜索或转移? 一旦知道,就可以对用于整数的数据类型进行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM