如何读取大量数字
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/
阅读它的文档以供使用。
然后,您需要明确要对数字做什么:汇总,转换,搜索或转移?知道后,您可以对用于整数的数据类型进行操作。
相关文章:
- 如何在 C++ 中将文件中的逗号分隔数字读取到数组中?
- 从.txt文件中读取浮点型数字并在公式中使用它们
- 如何从保存在 Java 中C++的字节数组中读取数字?
- 为什么我的程序在读取/写入文件时会删除最重要的数字?
- C++:从文件中读取字符串和整数,并获得最大数字
- 如何读取具有数字间隔的文本文件?C++
- 如何将uint8_t的二进制表示形式读取为数字
- C++ - 将 int 读取为字母和数字序列
- 在c++中读取文件时,它如何自动将字符放入字符数组,将数字放入整数变量
- 我可以从具有不同数字分隔符的istream中读取双值吗
- 如何从文件中读取用空格分隔的数字
- 从文本文件中的每一行读取数字,并计算数字重复的次数
- 将任意大小的大量 Base-10 数字读取到位集中
- 无需使用循环,就将ISBN-10的前9位数字读取为字符串并计算第10位数字
- 将字符串和数字读取到向量C
- C++ 将文件中的数字读取到数组中,然后将其打印到其他数组中
- 将数字读取到矢量
- (c++)试图将数字读取到数组中,在输出中得到垃圾数字
- 在读取文件时,在增加数组大小的同时,将浮点数字读取到动态分配的中
- 猜数字 - 读取错误时无限循环