# 四則運算 & 字串處理
>若有任何疑問請至 Discord「作業討論」頻道討論
## 本章節要學什麼?
學習練習使用基礎的四則運算來熟悉加減乘除與重構簡單的計算元件(1 ~ 5 題),以及基礎常見的字串處理方法(6 ~ 10 題)。
部分題目下方附有 keywords,表示該題目運用到課堂外的語法或技巧,同學可依照 keywords 搜尋了解概念。
### 提示
如果不知道要引用哪些方法來完成題目,可以試試看……
1. 閱讀、搜尋文檔:[JavaScript 字符串方法](https://www.w3school.com.cn/js/js_string_methods.asp)、[Mozilla MDN String](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Reference/Global_Objects/String)。
2. 在 DC 作業討論串參考同學們的解答。
## 題目一:相乘三次 (*)
輸入一個數字後,該參數會相乘 3 次,例如輸入 `2`,輸出為 `2*2*2=8`
``` =JavaScript
// input 輸入
multiply3Times(3);
multiply3Times(0);
multiply3Times(9);
// output 輸出
27
0
729
```
✨keywords:指數運算子
## 題目二:取 2 的餘數 + 判斷是否可整除 (% + 結果判斷)
``` =JavaScript
// input 輸入
isDivisible(3);
isDivisible(2);
isDivisible(8);
// output 輸出
未整除
已整除
已整除
```
## 題目三:簡單計算機
```=javascript
// input 輸入
calculate(3,5,'+');
calculate(4,2,'-');
calculate(7,9,'*');
calculate(5,5,'/');
// output 輸出
8
2
63
1
```
## 題目四:商業邏輯題:增加服務費
六角冰果店即將開張,但發現收銀機漏寫服務費邏輯,還請協助撰寫:
* 一個 `serviceCharge`函式,來計算 5% 服務費並回傳總計費用為多少。
情境:小華吃了一碗冰,小計 100 元,加上服務費為 105 元。
```=javascript
<!-- 作答開始 -->
function serviceCharge(num){
}
<!-- 作答結束 -->
const total = serviceCharge(100);
console.log(`您總計費用為 ${total}`)
```
## 題目五:重構題:消除重複,抽離變因
六角冰店超賺,於是開了二店為八角冰店,收銀機商業邏輯調整為:
1. 兩家店同時聘請專業執事與女僕,增加服務費為 10%
2. 六角冰店一碗冰 100 元,八角冰店一碗冰 800 元
`sixAngleCalculate`、`eightAngleCalculate` 丟入 `num` 冰碗數量,就可獲得總費用
### 重構思路
1. 兩個函式裡面的服務費都是一樣的,可以嘗試抽出來成一個新函式 `serviceCharge`,專門來計算兩間店的服務費
```=javascript
// 第一個參數為冰的數量
function sixAngleCalculate(num){
const subTotal = num * 100;
const serviceCharge = subTotal * 0.1;
const total = subTotal + serviceCharge;
return total;
}
//
function eightAngleCalculate(num){
const subTotal = num * 800;
const serviceCharge = subTotal * 0.1;
const total = subTotal + serviceCharge;
return total;
}
```
✨keywords:Math.floor、浮點數誤差
### 題目六:字串大小寫互換
``` =JavaScript
// input 輸入
lowerCase("FOKFF@gmail.com")
upperCase("hello, world")
// output 輸出
"fokff@gmail.com"
"HELLO, WORLD"
```
✨keywords: toLowerCase()、toUpperCase()
### 題目七:字串去左右空白
``` =JavaScript
// input 輸入
trimString(" hi, mom! ")
trimString(" aa@gmail.com ")
// output 輸出
"hi, mom!"
"aa@gmail.com"
```
✨keywords: trim()
### 題目八:字串切割
``` =JavaScript
// input 輸入
getArea("高雄市前鎮區一心二路33號");
getArea("高雄市新興區新興路66號");
// output 輸出
"前鎮區"
"新興區"
```
✨keywords:slice()
### 題目九:擷取字串內容
創造一個函式用於擷取輸入字串的指定索引字元,如找不到,回傳 false 。
``` =JavaScript
// input 輸入
const input = "Hello"
getCharacter(input, 1)
getCharacter(input, 3)
getCharacter(input, 10)
// output 輸出
"H"
"l"
false
```
✨keywords:string.length
### 題目十:反轉字串
創造一個函式用於反轉字串內文字的順序。
``` =JavaScript
// input 輸入
stringReverser("hello")
// output 輸出
olleh
```
✨keywords:reverse()
<!-- 解答:
https://codepen.io/fhljksmg-the-styleful/pen/MYaPXae?editors=0012
這邊解答可能不是最佳的解法,
適合初學者或者該題突然卡住者,
內容程式碼有針對內容進一步註解可供參考。
-->