--- tags: 初階班 --- 不是正課會教但有時候會用到 # 註解 註解就是寫一些東西但程式不會執行 通常用在寫給人看 或debug時多做了一些事,最後不想要他出現 ## 整行註解 在要註解的東西前面加上`//` $ex:$ ```cpp= #include <iostream> using namespace std; int main(){ int n; cin >> n; // cout << n; n++; // 把n + 1 cout << n; } ``` 輸入 `3` 輸出 `4` :::warning `//`之後一整行都不會執行 ::: ## 單行內註解 只註解一行內的某段 用`/*` `*/`包起來 ```cpp= #include <iostream> using namespace std; int main(){ int n, m; cin >> n >> m; int sum = n + m; cout /* << n << m */ << sum; //只輸出sum } ``` ## 多行註解 可以改成下面這樣 ```cpp= #include <iostream> using namespace std; int main(){ int n; cin >> n; /** cout << 1 << '\n'; cout << 2 << '\n'; ➙這三行都不會執行 cout << 3 << '\n'; **/ cout << n; } ``` # 定義 有些東西很長但又一直用到,那就可以用定義來簡化他 通常寫在`main`外面,不過在裡面也可以 寫法是`#define` `自訂名稱` `原程式` 例如 ```cpp= #include <iostream> using namespace std; #define C cout //之後程式遇到C就會自動變cout int main(){ int n; cin >> n; C << n; //只是舉例,正常不會這樣用 } ``` ## 常用define * 習慣用`endl`但又想要`'\n'`的速度 ```cpp= #define endl '\n' ``` (不建議使用,還是打`\n`比較好) <font color="#FFFFFF">e</font> * `long long`很長不想打 ```cpp= #define LL long long ``` ## 取消define ```cpp #undef 已定義物 ``` # 常用數學式 大部分需要`#include <cmath>` 建議變數都用`double` ## 四捨五入 ### round * 到整數 ```cpp round(n) ``` * 到小數後第k位 先乘$10^k$再除掉 ex: 四捨五入到小數後2位 ```cpp round(n*100)/100 ``` ### setprecision 需`#include <iomanip>` ```cpp= #include <iostream> #include <iomanip> using namespace std; int main(){ double n = 2.3333; cout << fixed << setprecision(2) << n; //輸出2.33 } ``` :::warning 因為精度問題,有時候一樣的數字用不同的方法四捨五入得到的結果可能不一樣(C++的精度很謎~) ::: :::spoiler ***精度計算*** c++的小數是以科學記號存取的 * $ex:1.001\times2^{1001}$ 而c++裡最多儲存52位數,超過的話被捨去,故會有精度問題 ::: ## 向上取整(無條件進位) ```cpp ceil(n) ``` ## 向下取整(無條件捨去) ```cpp floor(n) ``` ## $n^m$ ```cpp pow(n, m) ``` :::warning 注意:`pow`函式的結果為`double`型態 ::: :::spoiler ***計算速度*** 以快速冪的方式計算時間複雜度 $O(\lg N)$ 比慢慢乘的 $O(N)$ 快 ::: ## $\sqrt n$ ```cpp sqrt(n) ``` 也可`pow(n, 0.5)` ## $\log$ 預設以自然對數$e$為底(即$\ln n$): ```cpp log(n) ``` $\log_2{n}:$ ```cpp log2(n) ``` $\log_{10}{n}:$ ```cpp log10(n) ``` $\log_{m}n:$ ```cpp log(n)/log(m) ``` ## 三角函數 ```cpp sin(n), cos(n), tan(n) ``` :::warning 注意:單位為rad,回傳值是以float型態 ::: # 其他好用內建函式 ## 取最大/最小值 ```cpp max(a, b) min(a, b) max({a, b, c}) min({a, b, c}) //也可超過3個 ``` ## 翻轉 ```cpp reverse(v.begin(), v.end()) reverse(str.begin(), str.end()) reverse(arr, arr + n) ``` # 各資料型態的最大/最小值 ## 標頭檔 ```cpp #include <climits> ``` ## 使用 通常用在一些需要把值設成無限的地方 以下列一些常用的 ```cpp INT_MAX //(= 2^31-1 = 2147483647) INT_MIN LONG_MAX //long LONG_MIN //long LLONG_MAX //long long LLONG_MIN //long long ULLONG_MAX //unsigned long long ``` # 萬用標頭檔 含有比較多函式的標頭檔(基本上平常會用的都有) ```cpp #include <bits/stdc++.h> ```