Les bases du Rust 2

Ces exercices portent sur les fonctions, le if utilisé comme expression, la boucle for sur des valeurs et le mot-clé return. Faites-les dans l'ordre.

Valeur absolue

Renvoyer la valeur absolue d'un entier, en utilisant le if comme expression (pas de return, pas de mut).

  • Objectif : let x = if cond { a } else { b };.
  • Signature suggérée : fn abs(n: i64) -> i64.
  • Cas de test : abs(-5) -> 5, abs(5) -> 5, abs(0) -> 0.

Factorielle

Calculer n! (produit des entiers de 1 à n). Par convention 0! = 1.

  • Objectif : for, accumulateur.
  • Signature suggérée : fn factorielle(n: u64) -> u64.
  • Cas de test : factorielle(0) -> 1, factorielle(1) -> 1, factorielle(5) -> 120, factorielle(10) -> 3628800.

PGCD (algorithme d'Euclide)

Calculer le plus grand commun diviseur de deux entiers par modulos successifs.

  • Objectif : while, %, réaffectation de variables.
  • Signature suggérée : fn pgcd(a: u64, b: u64) -> u64.
  • Cas de test : pgcd(12, 18) -> 6, pgcd(17, 5) -> 1, pgcd(0, 7) -> 7, pgcd(48, 36) -> 12.

Puissance sans pow

Calculer base élevé à la puissance exp, sans utiliser i64::pow ni f64::powi.

  • Objectif : for, accumulateur multiplicatif.
  • Signature suggérée : fn puissance(base: i64, exp: u32) -> i64.
  • Cas de test : puissance(2, 0) -> 1, puissance(2, 10) -> 1024, puissance(-3, 3) -> -27.

Nombre de chiffres

Compter les chiffres de l'écriture décimale d'un entier. 0 compte pour un chiffre.

  • Objectif : while, division entière /= 10.
  • Signature suggérée : fn nb_chiffres(n: u64) -> u32.
  • Cas de test : nb_chiffres(0) -> 1, nb_chiffres(7) -> 1, nb_chiffres(1000) -> 4, nb_chiffres(123456789) -> 9.