El desbordamiento aritmético ocurre cuando un cálculo, como una operación aritmética o una conversión de tipo, da como resultado un valor mayor que la capacidad del tipo que lo recibe.
En estas circunstancias, las expresiones de tipo int y long, y sus equivalentes sin signo, dan la vuelta de manera silenciosa.
El comportamiento de los cálculos con enteros se puede modificar usando la palabra clave checked. Cuando ocurre un desbordamiento dentro de un bloque checked, se lanza una instancia de OverflowException.
int one = 1;
checked
{
int expr = int.MaxValue + one; // OverflowException is thrown
}
// or
int expr2 = checked(int.MaxValue + one); // OverflowException is thrown
Las expresiones de tipo float y double toman un valor especial: infinito.
Las expresiones de tipo decimal lanzan una instancia de OverflowException.
El país de Hyperia tiene sus problemas. En particular, la inflación está fuera de control. Te han traído en avión para que asumas un contrato en el banco central.
Para simplificar la administración interna, el banco central ha dividido cada denominación en partes: una base, que se mantiene relativamente sin cambios, y un multiplicador (el mismo para todas las denominaciones) que se puede cambiar cada año, cada semana o incluso cada día.
A la hora de imprimirlos, las denominaciones de los billetes son el producto de la base y el multiplicador.
Cuando se introdujo este sistema, el billete mínimo ya tenía una denominación de 10,000,000. La tabla de abajo muestra la situación (para las primeras 3 denominaciones) cuando se introdujo el sistema por primera vez. Las cosas han empeorado mucho desde entonces, y no solo cambia el multiplicador: también lo hace la base.
| Base | Multiplicador | Denominación |
|---|---|---|
| 10,000 | 1,000 | 10,000,000 |
| 50,000 | 1,000 | 50,000,000 |
| 100,000 | 1,000 | 100,000,000 |
| ... | 1,000 | ... |
En resumen, esto significa que denominación = base * multiplicador.
Implementa el método CentralBank.DisplayDenomination(), que recibe la base y el multiplicador y devuelve un string con su producto (base * multiplicador). El string numérico que se devuelve no debe estar formateado.
Si la operación de multiplicación provoca un desbordamiento, se debe devolver el string "*** Too Big ***".
CentralBank.DisplayDenomination(10000L, 1000L);
// => "10000000"
CentralBank.DisplayDenomination(long.MaxValue / 2, 10000L);
// => "*** Too Big ***"
El banco central usa el mismo enfoque de multiplicador para registrar el PIB internamente. Las estadísticas se registran en una denominación base y luego se escalan usando el multiplicador.
Implementa el método CentralBank.DisplayGDP(), que recibe el PIB base y el multiplicador actual y devuelve el PIB como un string.
Si el PIB no se puede calcular, se devuelve "*** Too Big ***".
CentralBank.DisplayGDP(555f, 10000f);
// => "5550000"
CentralBank.DisplayGDP(float.MaxValue / 2, 10000f);
// => "*** Too Big ***"
Tu jefe en el banco quiere asegurarse de que no haya problemas a la hora de pagar las nóminas.
Implementa el método CentralBank.DisplayChiefEconomistSalary(), que recibe un salario expresado en unidades base (como arriba) y un multiplicador, y devuelve un string con el producto.
Si el salario no se puede calcular, se devuelve "*** Much Too Big ***".
CentralBank.DisplayChiefEconomistSalary(555000m, 10000m);
// => "5550000000"
CentralBank.DisplayChiefEconomistSalary(555000m, decimal.MaxValue / 2L);
// => "*** Much Too Big ***"
Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.