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

A hiperinflação atinge a Hyperia

Exercício de aprendizagem

Introdução

Transbordo

O transbordo aritmético ocorre quando um cálculo, como uma operação aritmética ou uma conversão de tipos, dá origem a um valor maior do que a capacidade do tipo que o recebe.

Nessas circunstâncias, as expressões do tipo int e long e os seus equivalentes sem sinal dão a volta silenciosamente.

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

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

// or

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

As expressões do tipo float e double assumem um valor especial: o infinito.

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

Instruções

O país da Hyperia tem os seus problemas. Em particular, a inflação está fora de controlo. Foste trazido de avião para assumires um contrato no banco central.

1. Imprimir denominações de notas

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

No momento da impressão, as denominações das notas são o produto da base pelo multiplicador.

Quando este sistema foi introduzido, a nota mais baixa já tinha uma denominação de 10,000,000. A tabela abaixo mostra a situação (para as primeiras 3 denominações) quando o sistema foi introduzido. As coisas pioraram muito desde então e não só o multiplicador muda, como 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, isto significa que denominação = base * multiplicador.

Implementa o método CentralBank.DisplayDenomination(), que recebe a base e o multiplicador e devolve uma string com o produto de ambos (base * multiplicador). A string numérica devolvida não deve ser formatada.

Se a operação de multiplicação provocar um overflow, deve ser devolvida a string "*** Too Big ***".

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

2. Mostrar o PIB da Hyperia

O banco central usa a mesma abordagem do multiplicador para registar o PIB internamente. As estatísticas são registadas numa denominação base e depois ampliadas através do multiplicador.

Implementa o método CentralBank.DisplayGDP(), que recebe o PIB base e o multiplicador atual e devolve o PIB como string.

Se o PIB não puder ser calculado, é devolvida a string "*** Too Big ***".

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

3. Mostrar o salário do economista-chefe

O teu chefe no banco quer garantir que não haverá problemas na altura de processar os salários.

Implementa o método CentralBank.DisplayChiefEconomistSalary(), que recebe um salário expresso em unidades base (como acima) e um multiplicador e devolve uma string com o produto.

Se o salário não puder ser calculado, é devolvida a string "*** Much Too Big ***".

CentralBank.DisplayChiefEconomistSalary(555000m, 10000m);
// => "5550000000"
CentralBank.DisplayChiefEconomistSalary(555000m, decimal.MaxValue / 2L);
// => "*** Much Too Big ***"
Editar via GitHub A ligação abre numa nova janela ou separador
C# Exercism

Estás pronto para começar A hiperinflação atinge a Hyperia?

Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.