這篇來講講實用的輸入以及輸出技巧。由於很多輸入輸出都跟使用的資料型態有關,所以也會帶到一點資料型態的部分
資料型態 | 範圍 | 估計值 |
---|---|---|
int | ~ | |
long long | ~ | |
__int128 | ~ | 很大 |
__int128
無法被直接輸入輸出,通常是運算較大的數字才會用到
浮點數就是指有小數點的數字
資料型態 | 範圍 | 精度 |
---|---|---|
float | 小數點後七位 | |
double | 小數點後十五位 |
記得要有標頭檔 <iomanip>
記得要有標頭檔 <cmath>
ceil()
: 無條件進位
floor()
: 無條件捨去
round()
: 四捨五入
一個 char
變數就是儲存 ASCII 表裡面的一個整數編號
這裡使用 C++ 的方法來處理字串,C 語言的可以看這篇
首先要先引入標頭檔 <string>
getline()
可以讀入整行
要注意 getline()
會把 '\n'
處理掉,但是 cin
不會處理掉 '\n'
('\n'
還是存在輸入流裡面)。因此兩者混著使用時須要再多一行 getline()
來處理掉 '\n'
記得要有標頭檔 <sstream>
記得要有標頭檔 <iomanip>
記得要有標頭檔 <iomanip>
記得要有標頭檔 <iomanip>
endl
除了暫存之外,還會 flush 掉 output buffer
'\n'
只會單純換行,因此會比較快
競程選手們習慣在主程式第一行就寫上
這樣速度會快很多
有時候原本 TLE 的題目就會因此 AC
先說 sync_with_stdio()
這個函數是什麼意思
這個函數是說「同步 C 與 C++ 的輸入/輸出流」。原本 C++ 的 cin
和 cout
是很快的,但是為了在混著使用時與 scanf
和 printf
同步,因此讓 C++ 的慢一點。原本 sync_with_stdio()
默認的數值是 true
,所以我們上述那一行 sync_with_stdio(false)
就會把它關掉
在原本 C++ 的 cin
中,都會自動呼叫 cout.flush()
函數,這會導致 output buffer 每次出入都刷新一次,非常沒效率,因此需要 cin.tie(0)
把它關掉
如果加了上面那兩行,可想而知,原本為了協調 C 與 C++ 的輸入輸出就會被破壞。一旦混用了就會出現不可預期的後果 (順序會亂掉),這部分請讀者自行體會幾次就會知道了
ShanC 程式競賽筆記
作者: ShanC
更新: 2024/1/10