<style>
html, body, .ui-content {
background-color: #333;
color: #ddd;
}
body > .ui-infobar {
display: none;
}
.ui-view-area > .ui-infobar {
display: block;
}
.markdown-body h1{
color: #9CCEF2;
}
.markdown-body h2,
.markdown-body h3{
color: #B1D6CA;
}
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
color: #ddd;
}
.markdown-body h1,
.markdown-body h2 {
border-bottom-color: #ffffff69;
}
.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
color: #fff;
}
.markdown-body img {
background-color: transparent;
}
.ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a {
color: white;
border-left: 2px solid white;
}
.expand-toggle:hover,
.expand-toggle:focus,
.back-to-top:hover,
.back-to-top:focus,
.go-to-bottom:hover,
.go-to-bottom:focus {
color: white;
}
.ui-toc-dropdown {
background-color: #333;
}
.ui-toc-label.btn {
background-color: #191919;
color: white;
}
.ui-toc-dropdown .nav>li>a:focus,
.ui-toc-dropdown .nav>li>a:hover {
color: white;
border-left: 1px solid white;
}
.markdown-body blockquote {
color: #bcbcbc;
}
.markdown-body table tr {
background-color: #5f5f5f;
}
.markdown-body table tr:nth-child(2n) {
background-color: #4f4f4f;
}
.markdown-body code,
.markdown-body tt {
color: #eee;
background-color: rgba(230, 230, 230, 0.36);
}
a,
.open-files-container li.selected a {
color: #5EB7E0;
}
</style>
###### tags: `tgirc早修book`
# 常用函式
C++ 中的函式庫,存有不少好用的函式,善加利用可以節省不少時間,但還是要先明白該如何撰寫再使用
## 最大值、最小值
先試著撰寫一段<font color="F5F6B6">**能輸出最小值**</font>的程式碼吧
先輸入 n,再輸入 n 個數,輸出其中的最小值

```cpp=
#include <iostream>
using namespace std;
int main(){
int n,num;
cin >> n >> num;
int mi=num;
n-=1;
while(n--){
cin >> num;
if(num < mi){
mi=num;
}
}
cout << mi <<'\n';
return 0;
}
```
在 <font color="F5F6B6">**\<algorithm\>**</font> 中,最大值最小值的函式是 <font color="F5F6B6">**max(x,y)**</font> 跟 <font color="F5F6B6">**min(x,y)**</font>,用法如下
```cpp=
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int n,num;
cin >> n >> num;
int mi=num;
n-=1;
while(n--){
cin >> num;
mi = min(num,mi);
}
cout << mi <<'\n';
return 0;
}
```
:::info
一定要注意的是,x 和 y 的型別要相同,一方為 int 時另一方不可以是 long long 型態,也別忘了在上方要 #include \<algorithm>
在宣告最大值或最小值的變數時,要避免使用 max 和 min,因為這是函式的名稱,盡量不要重複使用,可用 ma、mi 或是其他名稱替代
:::
## 最大公因數
輸入 a 和 b,輸出 <font color="F5F6B6">**a 跟 b 的最大公因數**</font>(ps. 運用輾轉相除法)

```cpp=
#include <iostream>
using namespace std;
int main(){
int a,b;
cin >> a >> b;
while(b != 0){
a%=b;
int tmp=a;
a=b;
b=tmp;
}
cout << a <<'\n';
return 0;
}
```
在 <font color="F5F6B6">**\<algorithm\>**</font> 中,有最大公因數的函式 <font color="F5F6B6">**\_\_gcd(x,y)**</font> (gcd 前有兩個底線)
同樣也要注意兩個變數的型別要相同,否則程式會出錯
```cpp=
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int a,b;
cin >> a >> b;
cout << __gcd(a,b) <<'\n';
return 0;
}
```
## 絕對值
輸入一個整數 n,輸出 <font color="F5F6B6">**n 的絕對值**</font>

```cpp=
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
if(n < 0){
cout << -n <<'\n';
}
else{
cout << n << '\n';
}
return 0;
}
```
絕對值的函式 <font color="F5F6B6">**abs(x)**</font> 在 <font color="F5F6B6">**\<cmath\>**</font> 中。
然而 abs 預設值是 int,如果要輸出的值大於 int ,會發生下圖情況

若變數型態是 long,就要使用 <font color="F5F6B6">**labs(n)**</font>
但 cmath 中沒有 long long 型態的 abs,因此要引入函式庫 <font color="F5F6B6">**\<cstdlib\>**</font> 才能使用 <font color="F5F6B6">**llabs(n)**</font>
```cpp=
#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
int main(){
long long n;
cin >> n;
cout<<llabs(n)<<'\n';
return 0;
}
```

## 交換兩數
輸入 a 和 b,將 <font color="F5F6B6">**a 與 b 的值交換後輸出**</font>。

```cpp=
#include <iostream>
using namespace std;
int main(){
int a, b, temp;
cin >> a >> b;
temp = a; //使用temp避免a的值被覆蓋掉
a = b;
b = temp;
cout << "a=" << a << " b=" << b;
return 0;
}
```
交換兩數的函式是 <font color="F5F6B6">**swap(a,b)**</font> ,也要注意兩個要被交換的變數型態必須相同。
```cpp=
#include <iostream>
using namespace std;
int main(){
int a,b;
cin >> a >> b;
swap(a, b);
cout << "a=" << a << " b=" << b;
return 0;
}
```