---
# System prepended metadata

title: 一些有點用的東西
tags: [初階班]

---

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