我需要在一道编程题中输入1到10000范围内的大量数字。题目建议使用快速I/O方法。
我查看了Fast input/output in competitive programming但它太复杂了。那么有人可以告诉我一种更简单的方法来获得快速 io 吗?
另外,请告诉我使用 gets
然后执行 atoi()
是否比使用 scanf(%d)
更快输入。
最佳答案
为了回答你问题的第二部分,对我来说,atoi
的速度大约是它的两倍。考虑以下因素:
#define ITERS 1000000
clock_t testAtoi()
{
char buffer[64];
clock_t start = clock();
for (int i = 0; i < ITERS; i++) {
sprintf(buffer, "%i", i);
int l = atoi(buffer);
}
return clock() - start;
}
clock_t testScanf()
{
char buffer[64];
clock_t start = clock();
for (int i = 0; i < ITERS; i++) {
sprintf(buffer, "%i", i);
int l = 0;
sscanf(buffer, "%i", &l);
}
return clock() - start;
}
int main()
{
printf("clocks for atoi: %lu\n", testAtoi());
printf("clocks for sscanf: %lu\n", testScanf());
return 0;
}
对我来说,使用 gcc 和 -O0
(所以我的变量没有被优化),程序输出:
clocks for atoi: 222011
clocks for sscanf: 392409
但是,如果您使用 FILE *
,那么 fscanf
可能会更快。我现在没有时间比较两者,但对于原始字符串,我大部分情况下都会使用 atoi
。
关于c++ - C++ 中的快速输入/输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10762967/