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.
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.
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 ***"
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 ***"
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 ***"
Crie sua conta no Exercism para aprender e dominar C# com 62 conceitos178 exercícios e mentoria humana de verdade, tudo de graça.