快读与快写的实现

Posted flowyuan-foreverworld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快读与快写的实现相关的知识,希望对你有一定的参考价值。

快读与快写

< 快读 >


  • 为什么要用快读?
    虽然scanf的读入速度比cin快,不过当我们遇到一些特别恶心的题目,哪怕用了sanf仍然会超时,而这时候就需要用上快读了。
  • 快读的大体思路:
    众所周知(反正我不知道),单个字符的读入速度要比读入数字的速度快,所以我们用 getchar() 以字符形式先读入字符,再将其化为数字来处理。

快读本体我们用一个函数来实现,因为体量较小,可以在前面加上 inline 来进一步节省时间。
实现代码如下:

inline int read()
{
    int x=0,falg=0;
    char c=getchar();   //读入第一个字符
    while (c>‘9‘||c<‘0‘){if (c==‘-‘) falg=1;c=getchar();}   //读入空格直接跳过,读入‘-‘标记flag为1。
    while (c<=‘9‘&&c>=‘0‘){x=x*10+c-‘0‘;c=getchar();}   //用循环逐步得到要读入的数字
    return falg?-x:x;
}

其实还是蛮简单的,自己也暴力测试过速度(在洛谷受苦),居然会比 cin 和printf 快,还是有些不可思议的,,,


< 快写 >

快写就更简单了,把整数 x 每一个 位上的数 逐一拆成字符输出即可,用的是 putchar() 。
代码如下

inline void write(int x)
{
    if(x<0)
    {
        putchar(‘-‘);
        x=-x;
    }
    if(x>9)
        write(x/10);

    putchar(x%10+‘0‘);
}

没了。

学习自:呐呐~





以上是关于快读与快写的实现的主要内容,如果未能解决你的问题,请参考以下文章

卡常三连(快读快写+re)

快读快写模板

C++ 快读快写模板

快读快写 2021.5.23

浅谈快读快写

模板