<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 個數,輸出其中的最小值 ![](https://i.imgur.com/E9AhBTY.png) ```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. 運用輾轉相除法) ![](https://i.imgur.com/swYFXHi.png) ```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> ![](https://i.imgur.com/IhrhFdO.png) ```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 ,會發生下圖情況 ![](https://i.imgur.com/zwAiZo2.png) 若變數型態是 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; } ``` ![](https://i.imgur.com/IxqFERL.png) ## 交換兩數 輸入 a 和 b,將 <font color="F5F6B6">**a 與 b 的值交換後輸出**</font>。 ![](https://i.imgur.com/xNNqh39.png =590x) ```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; } ```