學習軌道
/
C#
C#
/
練習
/
惡性通膨席捲 Hyperia
惡性通膨席捲 Hyperia

惡性通膨席捲 Hyperia

學習練習

簡介

溢位

當某個運算(例如算術運算或型別轉換)產生的值大於接收型別的容量時,就會發生算術溢位。

型別為int和long的運算式,以及它們對應的無號版本,在這種情況下都會悄悄地回繞。

整數運算的行為可以透過checked關鍵字來改變。當checked區塊內發生溢位時,會擲回OverflowException的執行個體。

int one = 1;
checked
{
    int expr = int.MaxValue + one;   // OverflowException is thrown
}

// or

int expr2 = checked(int.MaxValue + one);     // OverflowException is thrown

型別為float和double的運算式會取用無限大這個特殊值。

型別為decimal的運算式則會擲回OverflowException的執行個體。

說明

海佩利亞這個國家問題不少。尤其是通貨膨脹,已經完全失控。你被特地請來,接下中央銀行的一份合約。

1. 印出鈔票面額

為了簡化內部行政作業,中央銀行把每個面額拆成幾個部分:一個相對穩定的_基數_,以及一個_乘數_(所有面額共用同一個),可以每年、每週、甚至每天調整。

鈔票印出來時,上面的面額就是_基數_與_乘數_的乘積。

這套制度推行時,最小的鈔票面額就已經是 10,000,000。下表列出這套制度剛上路時的情況(前三種面額)。之後情況惡化了不少,不只乘數會變,基數也會變。

基數 乘數 面額
10,000 1,000 10,000,000
50,000 1,000 50,000,000
100,000 1,000 100,000,000
... 1,000 ...

總結來說,這表示_面額_ = 基數 * 乘數。

請實作CentralBank.DisplayDenomination()方法,它接收基數與乘數,並回傳兩者乘積(基數 * 乘數)的字串。回傳的數字字串不應加上任何格式。

如果乘法運算造成溢位,則應回傳字串"*** Too Big ***"。

CentralBank.DisplayDenomination(10000L, 1000L);
// => "10000000"
CentralBank.DisplayDenomination(long.MaxValue / 2, 10000L);
// => "*** Too Big ***"

2. 顯示海佩利亞的國內生產毛額

中央銀行內部記錄國內生產毛額時,採用同一套乘數做法。統計數據先以基數面額記錄,再用乘數放大。

請實作CentralBank.DisplayGDP()方法,它接收國內生產毛額的基數與目前的乘數,並以字串回傳計算結果。

若無法計算國內生產毛額,則回傳"*** Too Big ***"。

CentralBank.DisplayGDP(555f, 10000f);
// => "5550000"
CentralBank.DisplayGDP(float.MaxValue / 2, 10000f);
// => "*** Too Big ***"

3. 顯示首席經濟學家的薪水

你在銀行的上司想確保發薪水時不會出任何問題。

請實作CentralBank.DisplayChiefEconomistSalary()方法,它接收以基數單位表示的薪水(如上所述)與一個乘數,並回傳包含乘積的字串。

若無法計算薪水,則回傳"*** Much Too Big ***"。

CentralBank.DisplayChiefEconomistSalary(555000m, 10000m);
// => "5550000000"
CentralBank.DisplayChiefEconomistSalary(555000m, decimal.MaxValue / 2L);
// => "*** Much Too Big ***"
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
C# Exercism

準備好開始 惡性通膨席捲 Hyperia 了嗎?

註冊 Exercism,透過 62 個概念178 個練習 和真人引導來學習並精通 C#,全部免費。