快读的模板

快读快写的原理就是利用getchar()和putchar()巨快的特点进行读入,cin、cout就不说了,听说它比scanf还快,很厉害的。

正常版的话就是利用getchar()读入,对读到的数字处理:

 1 #include<string>
 2 #include<cstring>
 3 #include<cstdio>
 4 //我也不知道是哪个头文件
 5 inline void write(int x)  
 6 {  
 7     if(x<0) putchar('-'),x=-x;  
 8     if(x>9) write(x/10);  
 9     putchar(x%10+'0');  
10 }
11 inline int read()
12 {
13     int x=0;
14     char ch=getchar();
15     while(ch>='0'&&ch<='9')
16     {
17         x=(x<<1)+(x<<3)+ch-'0';
18         ch=getchar();
19     }
20     return x;
21 }
View Code

这个快读是只针对非负整数的,负数的话读入的就是0,但是用的时候还可以判断一下是否为负嘛,不要这么死板。

这个快写是只针对整数的,如果输出空格的话直接写putchar(32),输出换行的话直接写putchar(10),这两句也是可以放在for(;;)的第二个分号后面的(人有多大胆,for有多大产),有时可以少写一对大括号的。

下面的属于那种有模板我也不会背的,巨长无比

/*inline int Read()
{
    int F=1,Num=0; //F是记录数字是否为负数,Num存储读入的数字
    char ch=getchar(); //getchar()读取一个字符
    while(!isdigit(ch)) //isdigit()判断是否为数字
    {
        if(ch=='-') F=-1; //如果读入的字符是符号,标记F
        ch=getchar(); //继续读字符
    }
    while(isdigit(ch)) //如果当前读入的字符是数字,则将整个数字全部读入
    {
        Num=Num*10+ch-'0'; //将读入的ASCII字符转换为数字
        //或者上面的代码可以这样写:Num=(Num<<1)+(Num<<3)+ch-'0';
        ch=getchar(); //读取下一个字符
    }
    return Num*F; //将读取完毕的字符返回
}*/
/*inline long long read()
{
    long long F=1,Num=0; //F是记录数字是否为负数,Num存储读入的数字
    char ch=getchar(); //getchar()读取一个字符
    while(!isdigit(ch)) //isdigit()判断是否为数字
    {
        if(ch=='-') F=-1; //如果读入的字符是符号,标记F
        ch=getchar(); //继续读字符
    }
    while(isdigit(ch)) //如果当前读入的字符是数字,则将整个数字全部读入
    {
        Num=Num*10+ch-'0'; //将读入的ASCII字符转换为数字
        //或者上面的代码可以这样写:Num=(Num<<1)+(Num<<3)+ch-'0';
        ch=getchar(); //读取下一个字符
    }
    return Num*F; //将读取完毕的字符返回
}*/

 下面的快读利用了更快的fread();由于它的机制是一下子输入许多字符,所以对于有数字又有

/*
char buf[1<<15],*fs,*ft;
inline char getc(){
  return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:* fs++;
}
inline int In()
{
    int This=0,F=1; char ch=getc();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-') F=-1;
        ch=getc();
    }
    while(ch>='0'&&ch<='9')
    {
        This=(This<<1)+(This<<3)+ch-'0';
        ch=getc();
    }
    return This*F;
}*/
原文地址:https://www.cnblogs.com/qywyt/p/9066811.html