【暖*墟】#优化# 读入优化和输出优化

1. 读入优化

  • 最易懂的读入优化(正负整数)
void read(int &x){ //'&'表示引用,在函数中改变了x的值就意味着在外面x的值也会被改变
    int f=1; //标记正负
    x=0; //归零
    char s=getchar(); //读入第一个字符
    while(s<'0'||s>'9'){ //不是数字字符
        if(s=='-') f=-1; //标记负号
        s=getchar(); //继续读
    }
    while(s>='0'&&s<='9'){ //是数字
        x=x*10+s-'0'; s=getchar();
    }
    x*=f;//改变正负
}
  • 最简单的读入优化(正负整数)
void reads(int &x){ //读入优化(正负整数)
    int f=1;x=0;char s=getchar();
    while(s<'0'||s>'9'){if(s=='-')f=-1;s=getchar();}
    while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
    x*=f; //正负号
}
  • 最便捷的使用方法(正负整数)
int N;
read(N);

【其他方法和解释】

  • C++中有一个函数:getchar() ,用于读入字符,那么这跟读入整数有什么关系呢?
  • 其实,经过类似高精度的处理,就可以实现类型转换了。
  • 下面是正负数读入优化模板:
#include<cctype>
inline int read(){
    int X=0,w=0; char ch=0;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    return w?-X:X;
}
  • isdigit(x) 表示 x 是否是 0 ~ 9 的整数 ,是则返回 true ,不是则是 false。
  • 注意要用 cctype 头文件。
  • 像这样“XXX=read()”使用函数即可,效率超高。
  • 这里补充一个正负实数的读入优化:
inline double dbread(){
    double X=0,Y=1.0; int w=0; char ch=0;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=X*10+(ch^48),ch=getchar();
    ch=getchar();//读入小数点
    while(isdigit(ch)) X+=(Y/=10)*(ch^48),ch=getchar();
    return w?-X:X;
}

2. 输出优化

  • 在个别繁杂题目中,也可以使用输出优化。
  • 与读入优化类似,使用用来输出字符的“putchar()”函数,也可到目的。
  • 下面是正负数输出优化模板:
inline void write(int x){
     if(x<0) putchar('-'),x=-x;
     if(x>9) write(x/10);
     putchar(x%10+'0');
}

                                               ——时间划过风的轨迹,那个少年,还在等你。

猜你喜欢

转载自blog.csdn.net/flora715/article/details/82215276