Ein arithmetischer Überlauf entsteht, wenn eine Berechnung wie eine arithmetische Operation oder eine Typkonvertierung einen Wert ergibt, der größer ist als die Kapazität des Zieltyps.
Ausdrücke vom Typ int und long sowie ihre vorzeichenlosen Entsprechungen laufen in diesen Fällen stillschweigend über.
Das Verhalten von Ganzzahlberechnungen kannst du mit dem Schlüsselwort checked ändern. Wenn innerhalb eines checked-Blocks ein Überlauf auftritt, wird eine Instanz von OverflowException ausgelöst.
int one = 1;
checked
{
int expr = int.MaxValue + one; // OverflowException is thrown
}
// or
int expr2 = checked(int.MaxValue + one); // OverflowException is thrown
Ausdrücke vom Typ float und double nehmen den speziellen Wert Unendlich an.
Ausdrücke vom Typ decimal lösen eine Instanz von OverflowException aus.
Das Land Hyperia hat seine Probleme. Besonders die Inflation gerät außer Kontrolle. Du wurdest eingeflogen, um einen Vertrag bei der Zentralbank anzutreten.
Um die Verwaltung intern zu vereinfachen, hat die Zentralbank jeden Nennwert in Teile aufgeteilt: eine Basis, die relativ unverändert bleibt, und einen Multiplikator (derselbe für alle Nennwerte), der jährlich, wöchentlich oder sogar täglich geändert werden kann.
Beim Drucken sind die Nennwerte auf den Banknoten das Produkt aus Basis und Multiplikator.
Als dieses System eingeführt wurde, hatte die kleinste Banknote bereits einen Nennwert von 10.000.000. Die folgende Tabelle zeigt den Stand (für die ersten 3 Nennwerte), als das System eingeführt wurde. Seitdem ist es viel schlimmer geworden: Nicht nur der Multiplikator ändert sich, sondern auch die Basis.
| Basis | Multiplikator | Nennwert |
|---|---|---|
| 10.000 | 1.000 | 10.000.000 |
| 50.000 | 1.000 | 50.000.000 |
| 100.000 | 1.000 | 100.000.000 |
| ... | 1.000 | ... |
Zusammengefasst bedeutet das: Nennwert = Basis * Multiplikator.
Bitte implementiere die Methode CentralBank.DisplayDenomination(), die die Basis und den Multiplikator entgegennimmt und einen String ihres Produkts (Basis * Multiplikator) zurückgibt. Der zurückgegebene numerische String sollte nicht formatiert sein.
Wenn die Multiplikation einen Überlauf verursacht, sollte der String "*** Too Big ***" zurückgegeben werden.
CentralBank.DisplayDenomination(10000L, 1000L);
// => "10000000"
CentralBank.DisplayDenomination(long.MaxValue / 2, 10000L);
// => "*** Too Big ***"
Die Zentralbank verwendet intern denselben Multiplikator-Ansatz, um das BIP zu erfassen. Statistiken werden in einem Basis-Nennwert erfasst und dann mit dem Multiplikator hochskaliert.
Bitte implementiere die Methode CentralBank.DisplayGDP(), die das Basis-BIP und den aktuellen Multiplikator entgegennimmt und das BIP als String zurückgibt.
Wenn das BIP nicht berechnet werden kann, wird "*** Too Big ***" zurückgegeben.
CentralBank.DisplayGDP(555f, 10000f);
// => "5550000"
CentralBank.DisplayGDP(float.MaxValue / 2, 10000f);
// => "*** Too Big ***"
Dein Chef bei der Bank möchte sicherstellen, dass es zum Zeitpunkt der Lohnauszahlung keine Probleme gibt.
Implementiere die Methode CentralBank.DisplayChiefEconomistSalary(), die ein in Basiseinheiten ausgedrücktes Gehalt (wie oben) und einen Multiplikator entgegennimmt und einen String mit dem Produkt zurückgibt.
Wenn das Gehalt nicht berechnet werden kann, wird "*** Much Too Big ***" zurückgegeben.
CentralBank.DisplayChiefEconomistSalary(555000m, 10000m);
// => "5550000000"
CentralBank.DisplayChiefEconomistSalary(555000m, decimal.MaxValue / 2L);
// => "*** Much Too Big ***"
Melde dich bei Exercism an, um C# mit 62 Konzepte178 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.