1學習目標
- 會把一個數字拆成一位一位,再個別處理。
- 會用兩種方法拆位數:當成文字逐字取出,或用除以 10 的餘數。
- (延伸)會把拆開的位數重新組合成新的數字。
2概念說明
「12345 的每一位加起來是多少?」要回答這個問題,得先把 12345 拆成 1、2、3、4、5。有兩種方法:
方法一:當成文字,一個字一個字取出
把數字看成字串「12345」,用 K12 的逐字元走訪,第 i 個字元就是第 i 位數字。取出來的是文字,要當成數字來加。
方法二:用數學,一次拿掉一位
| 動作 | 12345 | 結果 |
|---|---|---|
| 除以 10 的餘數 → 個位數 | 12345 除以 10 的餘數 | 5 |
| 除以 10 後無條件捨去 → 拿掉個位數 | 12345 ÷ 10 無條件捨去 | 1234 |
重複這兩個動作,直到數字變成 0:5、4、3、2、1 就一位一位被拿出來了。因為事先不知道要重複幾次,所以用「重複直到 數字 = 0」。
📌 兩種方法都可以
方法一和 K12 的字串技巧一樣,比較直覺;方法二是數學上的標準做法,之後遇到更多數字題會常用到。平台上的範例答案用的是方法一。
3示範題:跟著一步一步做(1 題)
先讀題,再一步一步點開來看。建議每看完一步,就先自己在平台上試著寫寫看。
位數和
L2|進階MATH01-006給定一個非負整數 N,請計算它的每一位數字總和。
- 輸入
- 輸入一個非負整數 N。
- 輸出
- 輸出一個整數,代表 N 的位數和。
範例1
輸入
輸入
12345
輸出
15
第 1 步:讀題,找出輸入和輸出
- 輸入:一個非負整數 N,例如 12345。
- 輸出:每一位數字的總和,例如 15。
第 2 步:方法一,當成文字逐字取出
詢問並等待 → N(先變成文字)
總和 設為 0
i 從 1 數到 N 的長度:
總和 設為 總和 +(N 的第 i 個字元,轉成數字)
說出 總和
取出來的是文字「3」,要先轉成數字 3 才能相加:
- Blockly:寫成「(第 i 個字元)− 0」,減 0 會讓文字變成數字。如果直接用「+」,數字加文字會被接起來,0 +「3」會變成「03」。另外,要先用「字串組合」把答案和空字串接起來,確保 N 是文字(K12 說明過原因)。
- Scratch:「+」積木會自動把文字「3」當成數字 3,直接相加就可以。
第 3 步:方法二,用餘數一位一位拿掉
詢問並等待 → N
總和 設為 0
重複直到 N = 0:
總和 設為 總和 +(N 除以 10 的餘數)
N 設為 N ÷ 10 無條件捨去
說出 總和
用 12345 走一次:
| 這一輪開始時的 N | 取出的個位數 | 總和 |
|---|---|---|
| 12345 | 5 | 5 |
| 1234 | 4 | 9 |
| 123 | 3 | 12 |
| 12 | 2 | 14 |
| 1 | 1 | 15 |
| 0(停止) | - | 15 |
第 4 步:對照範例答案
按「載入範例」,範例答案用的是方法一。你可以兩種都寫寫看,比較哪一種比較好理解。
⚠️ 常見錯誤
- 方法一沒有把字元轉成數字(Blockly):總和會變成「012345」這種接在一起的文字,要先「− 0」再相加。
- 方法二忘了無條件捨去:12345 ÷ 10 = 1234.5,如果不捨去,N 永遠不會剛好變成 0,迴圈停不下來。
4延伸挑戰(1 題)
核心題都會了嗎?這些題目需要把好幾個技巧組合起來,想挑戰的話可以試試看。
🚀 數字反轉 L3|挑戰
挑戰重點:把數字反轉,例如 12340 → 4321。方法一:像 K12 反轉字串一樣倒著接,最後再把結果轉成數字,開頭的 0 就會消失。方法二:每取出一位,就讓「結果 = 結果 × 10 + 這一位」。
給定一個非負整數 N,請將它的數字順序反轉後輸出。反轉後前導 0 不需要保留。
- 輸入
- 輸入一個非負整數 N。
- 輸出
- 輸出一個整數,代表反轉後的數字。
範例1
輸入
輸入
12340
輸出
4321
💡 需要提示嗎?
用上一題的方法逐位取出數字,每取出一位就把結果×10 再加上這一位。
5自我檢核
學完之後,檢查看看你能不能做到這些事。有做不到的,就回到上面對應的地方再看一次。
- 我會把數字當成文字,逐字取出每一位。
- 我會用除以 10 的餘數取出個位數,並用無條件捨去拿掉個位數。
- 我知道什麼時候要用「重複直到」而不是「重複 N 次」。
- 我能說出兩種拆位數方法各自的做法。