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. 輸出優化