基础快读(新手入门)(C++实现)

作为一名蒟蒻,从刚开始接触到scanf与printf,再转到cin与cout,后来又发现后者不如前者的速度快,于是又投回了C的怀抱,或者输入一段取消同步的代码

std::ios::sync_with_stdio(false);

每一次的进步都意味着更灵活的处理,于是又产生了比前两者都快的快读算法,利用getchar()函数处理大量输入数据,从而有效降低了时间复杂度,这里只涉及int和double快读的实现

一.int快读

算法非常模板化,非常简单,代码如下:

#include
#include
using namespace std;
int read()
{
    int s=0,w=1;
    char ch=getchar();
    if(ch=='-')//判断是否为负数
    {
        w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        s=s*10+ch-'0';//进位并且加上个位
        ch=getchar();
    }
    return w*s;
}
int main()
{
    int b;
    b=read();
    cout<<b;
}

二.double快读

在int快读基础上稍有变化,主要处理小数部分,代码如下:

#include
#include
using namespace std;
double read()
{
    double s=0,w=1;
    char ch=getchar();
    if(ch=='-')
    {
        w=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        s=s*10+ch-'0';
        ch=getchar();
    }
    if(ch=='.')
    {
        ch=getchar();
        double f=0;
        int i=0;//计数器,计算小数位数
        while(ch>='0'&&ch<='9')
        {
            f=f*10+ch-'0';
            i++;
            ch=getchar();
        }
        for(int j=0;j<i;j++)
        {
            f/=10;
        }
        s+=f;
    }
    return w*s;
}
int main()
{
    double b;
    b=read();
    cout<<b;
}

你可能感兴趣的:(基础快读(新手入门)(C++实现))