我需要在C / C ++中读取大量(最多2 ^ 24)个大数字(每个最多22个字符)。如何进行这样的阅读?数字用空格分隔,我必须阅读全部直到换行。使用getch()并填充数组或有一些更智能的解决方案?
答案 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,你可能需要一个结构化的类型。您可以自己编写也可以使用库,例如
阅读文档以供使用。
然后,您需要明确要对数字做什么:总结,转换,搜索或转移?一旦你知道,你可以操作你用于整数的数据类型。