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.
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 :
D'après la documentation de PHP, il existe une valeur entière maximale :
La taille d'un
intdé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 lesintnon 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 unfloat. De même, une opération qui produit un nombre dépassant les limites du typeintrenverra unfloat.
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.
Inscris-toi sur Exercism pour apprendre et maîtriser PHP avec 11 concepts122 exercices, et un vrai mentorat humain, le tout gratuitement.