轨道
/
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的实例。

说明

Hyperia 这个国家问题不少。尤其是通货膨胀已经失控。你被专程请来,与中央银行签下了一份合同。

1. 打印纸币面额

为了简化内部的行政管理,中央银行把每个面额都拆成了两部分:一部分是相对不变的_基准值_,另一部分是_乘数_(所有面额共用同一个),可以按年、按周甚至按天调整。

印在纸币上的面额,就是_基准值_与_乘数_的乘积。

这套系统刚启用时,最小面额的纸币已经是 10,000,000 了。下表列出了系统刚启用时的情况(前 3 个面额)。此后情况恶化了很多,不光乘数在变,基准值也在变。

基准值 乘数 面额
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. 显示 Hyperia 的国内生产总值

中央银行内部记录国内生产总值时,用的也是同样的乘数思路。统计数据先以基准面额记录,再用乘数放大。

请实现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#,全部免费。