zoukankan      html  css  js  c++  java
  • 读入输出优化

     1.读入优化

      完整理解:

     1 void read(int &x)//'&'表示引用,也就是说x是一个实参,在函数中改变了x的值就意味着在外面x的值也会被改变
     2 {
     3     int f=1;//标记正负
     4     x=0;//归零(这就是潜在bug,有可能传进来时x没有归零)
     5     char s=getchar();//读入第一个字符
     6     while(s<'0'||s>'9')//不是数字字符
     7     {
     8         if(s=='-')//不能直接把f=-1,有可能输入的不是'-'而是其他乱七八糟的东西
     9             f=-1;
    10         s=getchar();//继续读
    11     }
    12     while(s>='0'&&s<='9')//是字符(一旦不是字符就意味着输入结束了)
    13     {
    14         x=x*10+s-'0';
    15         s=getchar();
    16     }
    17     x*=f;//改变正负
    18 }

     2.输出优化

      完整理解:

     1 void print(int x)//这里不用实参
     2 {
     3     if(x<0)//负数
     4     {
     5         putchar('-');
     6         x=-x;
     7     }
     8     if(x>9)//只要x还是2位数或更多就继续分解
     9         print(x/10);//这里递归完后栈里面x的每一位是倒过来的
    10     putchar(x%10+'0');//输出(要把int型变为char型,加'0'即可)
    11 }
    • 所以整理一下就长这样

    void read(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;
    }
    
    void print(int x)
    {
        if(x<0) putchar('-'),x=-x;
        if(x>9) print(x/10);
        putchar(x%10+'0');
    }

      最后还有一个buff,但不能本地调试

    inline char nc(){
        static char buf[100000],*p1=buf,*p2=buf;
        return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
    }
    inline int red(){
        char ch=nc();int sum=0;
        while(!(ch>='0'&&ch<='9'))ch=nc();
        while(ch>='0'&&ch<='9')sum=sum*10+ch-48,ch=nc();
        return sum;
    }

    其它什么的详见这里

    upd:

    我们最后得到了一个健康的快读+buff

     1 inline int gc()
     2 {
     3     static char buf[1008611];
     4     static int len=0,pos=0;
     5     if(pos==len) pos=0,len=fread(buf,1,1008611,stdin);
     6     if(pos==len) return EOF;
     7     return buf[pos++];
     8 }
     9 inline void red(int &x)
    10 {
    11     int c=gc();x=0;int f=1;
    12     while(!isdigit(c)){ if(c=='-') f=-1;c=gc(); }
    13     while(isdigit(c)){ x=x*10+c-'0'; c=gc(); }
    14     x*=f;
    15 }
  • 相关阅读:
    AcWing 157. 树形地铁系统 (hash判断树同构)打卡
    AcWing 156. 矩阵 (哈希二维转一维查询)打卡
    AcWing 144. 最长异或值路径 01字典树打卡
    AcWing 143. 最大异或对 01字典树打卡
    AcWing 142. 前缀统计 字典树打卡
    AcWing 139. 回文子串的最大长度 hash打卡
    AcWing 138. 兔子与兔子 hash打卡
    常用C库函数功能及用法
    编程实现C库函数
    C语言面试题5
  • 原文地址:https://www.cnblogs.com/kylara/p/9813352.html
Copyright © 2011-2022 走看看