众所周知,c++自带读入函数cin的速度非常慢,尤其是读入数字时。
而c自带读入函数scanf相对来说就要快一点,但在读取多个大数时还是会显得慢。
这个时候就需要我们手写读入函数了(简称快读)
快读思路:运用较快的读取字符函数getchar将数字读入再进行处理还原。
代码:
long long in(){
char c = getchar();
long long x = 0, f = 1;
for (; c < '0' || c > '9'; c = getchar())
if (c == '-') f = -1;
for (; c >= '0' && c <= '9'; c = getchar())
x = (x << 1) + (x << 3) + (c ^ 48);
return x * f;
}
int x=in();long long y=in();
long long in(long long &x){
char c = getchar();
int f = 1;
for (; c < '0' || c > '9'; c = getchar())
if (c == '-') f = -1;
for (; c >= '0' && c <= '9'; c = getchar())
x = (x << 1) + (x << 3) + (c ^ 48);
x*=f;
}
int x;in(x);long long y;in(y);
一般的OI竞赛中,这种快读就够用了,还有更加高深的读入(如fread)我就不一一赘述了(因为我也不会)
正经内容说完了,接下来就是大家期待的整活内容啦。
- 首先,scanf的读入速度比getchar慢,这是毋庸置疑的。
- 四则运算比位运算慢,这也是毋庸置疑的。
- ve

本文探讨了C++中cin输入速度慢的问题,提出了使用getchar函数实现的快读方法,并分享了一段快读代码。同时,作者以幽默的方式介绍了“慢读1.0”,通过结合scanf、四则运算、位运算、vector与普通数组、快速幂与pow函数、long long与int的比较,展示了相对较慢的读入方式。
最低0.47元/天 解锁文章
2593





