C 手寫快讀詳解(快速讀入數字)

2022-05-02 15:21:11 字數 947 閱讀 5249

眾所周知,c++裡是自帶讀入的(這不廢話嗎)

例如:

int

a; cin>>a;

這樣的讀入理解簡單,適合初學者,但是非常慢。

再例如:

int

a; scanf("%d

",&a);

這樣的讀入就比較快了,也較好理解,在題目不卡時間的情況下可以通過大部分題。

——但是,還不夠快。

有一些毒瘤題目是非常卡時間的,稍微慢一點就過不去,因此,快讀應運而生:

inline int

read()

while(ch>='

0'&&ch<='9'

)

return x*f;

}

原理其實也不難,我們知道,單個讀入字元要比讀入數字快得多(別問我,我也不知道為什麼)

因此我們可以以字元的形式讀入,然後自己計算出數字

重點是第十行:x=(x<<1)+(x<<3)+(ch^48);

" << x" 操作為二進位制操作,原理是將原二進位制數向左平移 x 位,右邊原位置以 0 補齊

例如:原二進位制數 10001   經過 << 2 後,變為 1000100

其效果: x << 1 == x * 2;

x << 2 == x * 2 * 2;

x << 3 == x * 2 * 2 * 2;

………………

所以 (x<<1)+(x<<3) 可視為 x * 10;

後面的 (ch^48) 效果為 ch - = '0';

getchar() 為讀入單個字元(包括空格 ,換行符)

當然,快讀也有不適用的時候,例如讀入中包含大量無用空格

111

12233

3211

52

這時就識趣的別用快讀了吧!

快速讀入(快讀)

在一些題目中,需要輸入很多的資料,而時間卻還限制著,這是我們就需要考慮提高輸入效率。scanf的輸入效率要高於cin,一般來說cin不能過的用scanf也許就能過,但總有情況需要更高的輸入效率,而getchar的輸入效率又高於scanf,於是就用這個方法輸入資料。如下 include using n...

C 快讀快寫詳解

define usefasterread 1 define rg register define inl inline define debug printf qwq n define debugd x printf var s is lld x,ll x define debugf x print...

快速讀入詳解

當你在資訊學競賽 oi 中進入了提高組時,你可能會被卡常!程式被卡常數,一般指程式雖然漸進複雜度可以接受,但是由於實現 演算法本身的時間常數因子較大,使得無法在oi icpc等演算法競賽規定的時限內執行結束。常數被稱為計算機演算法競賽之中最神奇的一類數字,主要特點集中於令人捉摸不透,有時候會讓水平很...