c++ 快速讀入輸出


1. 讀入優化

  • 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)表示 xx 是否是 0 ~ 9 的整數 ,是則返回 truetrue ,不是則是 falsefalse 。

    注意要用 cctype 頭文件。

    像這樣“X=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;
    }

     

  • 還有一個版本
  • int read(){
        int x=0;bool f=0;char c=getchar();
        while (c<'0'||c>'9'){if (c=='-')f=1;c=getchar();}
        while (c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
        return f?-x:x;
    }

     

  •  附fread:

    char buffer[100001],*S,*T; 
    inline char Get_Char()  {  
        if (S==T){  
            T=(S=buffer)+fread(buffer,1,100001,stdin);
            if (S==T) return EOF;  
        }
        return *S++; 
    }
    inline int read(){
        char c;int re=0;  
        for(c=Get_Char();c<'0'||c>'9';c=Get_Char());  
        while(c>='0'&&c<='9') re=(re<<1)+(re<<3)+(c-'0'),c=Get_Char();  
        return re;  
    }

     

  • 2. 輸出優化

    • 在個別繁雜題目中,也可以使用輸出優化!

    • 與讀入優化類似,使用用來輸出字符的“putchar()”函數,也可到目的

    • 下面是正負數輸出優化模板:

    • inline void write(int x)
      {
           if(x<0) putchar('-'),x=-x;
           if(x>9) write(x/10);
           putchar(x%10+'0');
      }

      總結

      • 使用讀入優化與輸出優化,可以在一些題目中贏得很多時間,甚至逆轉AC!

      • 而且代碼很短,性價比很高,完全可以經常使用!

      注意

      • 切記在使用時,應注意數據類型大小和正負!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM