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.
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.
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 ***"
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 ***"
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 ***"
Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.