[英]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,因此可能需要结构化类型。 您可以编写自己的库或使用库,例如
阅读其文档以供使用。
然后,您需要弄清楚数字的用途:总结,转换,搜索或转移? 一旦知道,就可以对用于整数的数据类型进行操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.