透過 MCP 連接 →

輸入計算

小提示:先選擇貨幣,再選擇模式。系統預設會使用該貨幣所有流通中的面額(以貪婪演算法做最少件數拆解)。

數學公式

數學公式: 找零計算機
Show calculation steps (1)
  1. Greedy denomination breakdown

    Greedy denomination breakdown: 找零計算機

    For each denomination d (largest first), in integer subunits: take as many as fit, then move to the smaller denomination.

廣告

結果

應找零金額
12.50
USD
面額 數量
$10 1
$2 1
50¢ 1
鈔票與硬幣總數 3

這個計算機能做什麼

找零計算機可以算出顧客在現金交易中應拿回多少零錢,並把這個金額拆解成最實用、張數最少的鈔票與硬幣組合。它是一個通用工具,不限於任何單一地區,讓你從多種常見的世界貨幣中挑選,包括美元(USD,預設值)、歐元(EUR)、英鎊(GBP)、加幣(CAD)、澳幣(AUD)、墨西哥披索(MXN)、菲律賓披索(PHP)、紐幣(NZD)以及巴西里爾(BRL)。

使用方式

先選擇貨幣與模式。在「計算找零」模式下,輸入商品售價與顧客付款金額,工具會以「收款金額減去售價」算出應找的零錢。在「直接輸入找零金額」模式下,你可以直接填入找零金額,跳過售價的運算。計算結果會顯示應找零金額,並附上一張表格,依面額由大到小列出每種鈔票與硬幣需要給幾張(枚),以及總共需要的張數與枚數。

公式與演算法

首先算出找零金額:

$$C = \text{Tendered} - \text{Purchase}$$

(或直接輸入的金額)。為了避免浮點數運算誤差,系統會將金額乘以 100 並四捨五入,換算成最小單位(分)。接著以貪婪演算法(greedy)從最大面額逐一往小循環,每種面額取

$$n_d = \left\lfloor \frac{r}{d} \right\rfloor,\quad r \leftarrow r - n_d\,d$$

枚,再從剩餘金額中扣除。對於美元、歐元、英鎊這類標準(canonical)的貨幣面額系統,貪婪演算法所得到的結果,正好就是張數與枚數最少的最佳解。

Advertisement
貪婪演算法的流程圖,先從剩餘找零中減去最大面額
貪婪演算法不斷選取能裝下的最大面額,然後用剩餘的金額繼續。

實例演練

以美元為例,售價 $7.50,顧客付款 $20.00。找零

$$\text{Change} = \$20.00 - \$7.50 = \$12.50 = 1250 \text{ 分}$$

貪婪演算法:一張 $10(剩 250 分)、一張 $2(剩 50 分)、一枚 50¢ 硬幣(剩 0)。結果:\(1 \times \$10\)、\(1 \times \$2\)、\(1 \times 50¢\) —— 總共 3 件。

把找零拆成幾張紙鈔和若干硬幣的圖示,附有數量標記
範例:將應找的零錢拆分成最少數量的紙鈔和硬幣。

常見問題

為什麼要換算成「分」?以最小單位(整數的分)進行運算,可以避免像 12.499999 這類誤差,導致多算出一分錢的情形。

如果我停用某個面額會怎樣?貪婪演算法仍會就剩下可用的面額進行拆解;如果無法湊到剛好歸零,它會回報剩餘無法找開的金額。建議保留最小面額的硬幣,才能確保找零金額正好湊齊。

貪婪演算法一定是最佳解嗎?對於各國標準的貨幣面額系統來說,是的。但若使用特殊面額組合,或停用了某些面額,它會給出一個有效、卻不一定是全域最少件數的拆解結果。

最後更新: