快读学习

本文最后修改于 686 天前,部分内容可能已经过时!

原理:不断用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评测)

Tags:none
上一篇
下一篇

添加新评论

0:00