我需要在 C/C++ 中读取大量的大数字(每个数字最多22个字符,数量高达2^24)。如何进行这样的读取?数字之间用空格分隔,并且我必须一直读取到换行符。是使用getch()并填充一个数组还是有更聪明的解决方案?
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成本。
阅读相关文档以了解使用方法。
接下来,您需要明确想要对数字执行什么操作:求和、转换、搜索或传输?一旦确定,您可以在整数所使用的数据类型上进行操作。
C
还是C++
?如果使用 C++,请使用流和向量。 - TZHX