快读,我们虽然可以抠标,但我不是一个不求甚解的人,所以我理解了才写(话说也很快理解啦)。还是很简单的。
首先,我们为什么要写快读,cin,scanf不是很简单吗,难道这很慢吗,真的!(之前Pascal就无所谓,全部都read/readln)
那么我们知道读入字符确是很快的(即getchar),那么很显然,我们可以用读入字符转数字来加快读入。
那么我们可以想想只有正整数怎么读,显然可以:
inline int read()//inline 加速读入
{
int x=0;char c=getchar();//x代表返回值,c代表读取的字符
while (c<'0'||c>'9') c=getchar();//读取所有非数部分
while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();//如果读取的字符为数,加入返回值
return x;
}
但是,我们发现很多时候会有负数,那么我们就要修改,事实上,只要加一句判断负号就可以了。
inline int read()
{
int x=0,y=1;char c=getchar();//y代表正负(1.-1),最后乘上x就可以了。
while (c<'0'||c>'9') {if (c=='-') y=-1;c=getchar();}//如果c是负号就把y赋为-1
while (c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
return x*y;//乘起来输出
}
如有疑问,请留言。