快读学习
本文最后修改于 777 天前,部分内容可能已经过时!
原理:不断用getchar()读入,再相加
例子1:
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}//如果输入是字符,判断是否是负数
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//输入数字并统计
return s*w;//输出结果
}
例子2(对称二叉树,NOIP2018PJT题解):
int read()
{
char s;
int x=0,f=1;
s=getchar();
while(s<'0'||s>'9')
{
if(s=='-') f=-1;
s=getchar();
}//0-9之间,存到x中
while(s>='0'&&s<='9')
{
x=(x<<3)+(x<<1)+s-'0'; //位运算
s=getchar();
}
return x*f;
}
e.g. 读入123 getchar() x=1 getchar() x=12 getchar() x=120+3
反复组装,读入速度比scanf还要快0.3-0.4s左右(cena评测)