---
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>
```