Parcours
/
C#
C#
/
Exercices
/
L'hyperinflation frappe Hyperia
L'hyperinflation frappe Hyperia

L'hyperinflation frappe Hyperia

Exercice d'apprentissage

Introduction

Dépassement arithmétique

Un dépassement arithmétique se produit lorsqu'un calcul, comme une opération arithmétique ou une conversion de type, donne une valeur supérieure à la capacité du type qui la reçoit.

Les expressions de type int et long, ainsi que leurs équivalents non signés, s'enroulent silencieusement sur elles-mêmes dans ces circonstances.

Le comportement des calculs sur les entiers peut être modifié à l'aide du mot-clé checked. Lorsqu'un dépassement arithmétique se produit à l'intérieur d'un bloc checked, une instance de OverflowException est levée.

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

// or

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

Les expressions de type float et double prennent une valeur spéciale, l'infini.

Les expressions de type decimal lèvent une instance de OverflowException.

Instructions

Le pays d'Hyperia a ses problèmes. L'inflation n'y est plus maîtrisée, notamment. On t'a fait venir en avion pour prendre un poste à la banque centrale.

1. Imprime les coupures de billets

Pour simplifier l'administration en interne, la banque centrale a divisé chaque coupure en deux parties : une base, qui reste relativement inchangée, et un multiplicateur (le même pour toutes les coupures), que l'on peut modifier chaque année, chaque semaine, voire chaque jour.

Au moment de l'impression, la valeur des coupures sur les billets est le produit de la base et du multiplicateur.

À l'époque où ce système a été introduit, la coupure minimale valait déjà 10 000 000. Le tableau ci-dessous montre la situation (pour les 3 premières coupures) au moment de l'introduction du système. Les choses se sont bien dégradées depuis, et non seulement le multiplicateur change, mais la base aussi.

Base Multiplicateur Coupure
10 000 1 000 10 000 000
50 000 1 000 50 000 000
100 000 1 000 100 000 000
... 1 000 ...

En résumé, cela signifie que coupure = base * multiplicateur.

Implémente la méthode CentralBank.DisplayDenomination(), qui prend la base et le multiplicateur et renvoie leur produit sous forme de string (base * multiplicateur). La string numérique renvoyée ne doit pas être formatée.

Si l'opération de multiplication provoque un débordement, la string "*** Too Big ***" doit être renvoyée.

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

2. Affiche le PIB d'Hyperia

En interne, la banque centrale utilise la même approche avec multiplicateur pour enregistrer le PIB. Les statistiques sont enregistrées dans une coupure de base, puis mises à l'échelle à l'aide du multiplicateur.

Implémente la méthode CentralBank.DisplayGDP(), qui prend le PIB de base et le multiplicateur actuel et renvoie le PIB sous forme de string.

Si le PIB ne peut pas être calculé, "*** Too Big ***" est renvoyé.

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

3. Affiche le salaire du chef économiste

Ton patron à la banque veut s'assurer qu'il n'y aura aucun problème au moment de la paie.

Implémente la méthode CentralBank.DisplayChiefEconomistSalary(), qui prend un salaire exprimé en unités de base (comme ci-dessus) et un multiplicateur, et renvoie une string contenant le produit.

Si le salaire ne peut pas être calculé, "*** Much Too Big ***" est renvoyé.

CentralBank.DisplayChiefEconomistSalary(555000m, 10000m);
// => "5550000000"
CentralBank.DisplayChiefEconomistSalary(555000m, decimal.MaxValue / 2L);
// => "*** Much Too Big ***"
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
C# Exercism

Prêt à commencer L'hyperinflation frappe Hyperia ?

Inscris-toi sur Exercism pour apprendre et maîtriser C# avec 62 concepts178 exercices, et un vrai mentorat humain, le tout gratuitement.