Grains

Grains

Moyen

Introduction

Il était une fois un serviteur sage qui sauva la vie d'un prince. Le roi promit de payer tout ce que le serviteur pourrait imaginer. Sachant que le roi aimait les échecs, le serviteur lui dit qu'il aimerait recevoir des grains de blé. Un grain sur la première case d'un échiquier, le nombre de grains doublant à chaque case suivante.

Instructions

Calcule le nombre de grains de blé sur un échiquier.

Un échiquier comporte 64 cases. La case 1 contient un grain, la case 2 en contient deux, la case 3 en contient quatre, et ainsi de suite, en doublant à chaque fois.

Écris du code qui calcule :

  • le nombre de grains sur une case donnée
  • le nombre total de grains sur l'échiquier

Valeur entière maximale

D'après la documentation de PHP, il existe une valeur entière maximale :

La taille d'un int dépend de la plateforme, même si la valeur maximale habituelle est d'environ deux milliards (soit 32 bits signés). Les plateformes 64 bits ont généralement une valeur maximale d'environ 9E18. PHP ne prend pas en charge les int non signés.

Autrement dit, PHP ne peut pas représenter un nombre supérieur ou égal à 2^63 sous forme d'entier. Certains tests de cet exercice nécessitent des entiers 64 bits (2^64), ce qui dépasse la limite de taille des entiers de PHP.

PHP convertit automatiquement les int en float lorsque les nombres deviennent trop grands :

Si PHP rencontre un nombre qui dépasse les limites du type int, il sera interprété comme un float. De même, une opération qui produit un nombre dépassant les limites du type int renverra un float.

Mais le type float a une précision limitée. Et le roi déteste l'imprécision. Le roi a donc décidé que les résultats des calculs devaient être fournis sous la forme d'un string exprimant la valeur entière, plutôt que d'exprimer la réponse sous forme de int ou de float. Et il veut des calculs entiers, pas une simple conversion paresseuse à la fin.

Peux-tu résoudre ce problème en évitant les nombres qui dépassent ce que le langage autorise directement ? Et merci de ne pas utiliser non plus d'autres bibliothèques PHP comme gmp ou bc.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
PHP Exercism

Prêt à commencer Grains ?

Inscris-toi sur Exercism pour apprendre et maîtriser PHP avec 11 concepts122 exercices, et un vrai mentorat humain, le tout gratuitement.