Trilhas
/
C#
C#
/
Exercícios
/
A hiperinflação atinge Hyperia
A hiperinflação atinge Hyperia

A hiperinflação atinge Hyperia

Exercício de aprendizagem

Introdução

Estouro

O estouro aritmético acontece quando um cálculo, como uma operação aritmética ou uma conversão de tipo, resulta em um valor maior do que a capacidade do tipo que o recebe.

Expressões dos tipos int e long, e seus equivalentes sem sinal, dão a volta silenciosamente nessas situações.

O comportamento dos cálculos com números inteiros pode ser modificado com a palavra-chave checked. Quando ocorre um estouro dentro de um bloco checked, uma instância de OverflowException é lançada.

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

// or

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

Expressões dos tipos float e double assumem um valor especial de infinito.

Expressões do tipo decimal lançam uma instância de OverflowException.

Instruções

O país de Hyperia tem seus problemas. Em particular, a inflação está fora de controle. Trouxeram você de avião para assumir um contrato no banco central.

1. Imprimir as denominações das cédulas

Para simplificar a administração interna, o banco central dividiu cada denominação em partes: uma base, que permanece relativamente inalterada, e um multiplicador (o mesmo para todas as denominações), que pode ser alterado anualmente, semanalmente ou até diariamente.

Quando impressas, as denominações nas cédulas são o produto da base pelo multiplicador.

Na época em que esse sistema foi introduzido, a cédula mínima já tinha uma denominação de 10.000.000. A tabela abaixo mostra a situação (para as 3 primeiras denominações) quando o sistema foi introduzido. As coisas pioraram muito desde então: não só o multiplicador muda, mas a base também.

Base Multiplicador Denominação
10.000 1.000 10.000.000
50.000 1.000 50.000.000
100.000 1.000 100.000.000
... 1.000 ...

Em resumo, isso significa que denominação = base * multiplicador.

Implemente o método CentralBank.DisplayDenomination() que recebe a base e o multiplicador e retorna uma string com o produto deles (base * multiplicador). A string numérica retornada não deve ser formatada.

Se a operação de multiplicação causar um overflow, então a string "*** Too Big ***" deve ser retornada.

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

2. Exibir o PIB de Hyperia

O banco central usa a mesma abordagem de multiplicador para registrar o PIB internamente. As estatísticas são registradas em uma denominação base e depois ampliadas usando o multiplicador.

Implemente o método CentralBank.DisplayGDP() que recebe o PIB base e o multiplicador atual e retorna o PIB como uma string.

Se o PIB não puder ser calculado, "*** Too Big ***" será retornado.

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

3. Exibir o salário do economista-chefe

Seu chefe no banco quer garantir que não haverá problemas na hora da folha de pagamento.

Implemente o método CentralBank.DisplayChiefEconomistSalary() que recebe um salário expresso em unidades base (como acima) e um multiplicador e retorna uma string contendo o produto.

Se o salário não puder ser calculado, "*** Much Too Big ***" será retornado.

CentralBank.DisplayChiefEconomistSalary(555000m, 10000m);
// => "5550000000"
CentralBank.DisplayChiefEconomistSalary(555000m, decimal.MaxValue / 2L);
// => "*** Much Too Big ***"
Editar via GitHub O link abre em uma nova janela ou aba
C# Exercism

Tudo pronto para começar A hiperinflação atinge Hyperia?

Crie sua conta no Exercism para aprender e dominar C# com 62 conceitos178 exercícios e mentoria humana de verdade, tudo de graça.