Érase una vez un sirviente sabio que salvó la vida de un príncipe. El rey prometió pagarle todo lo que el sirviente fuera capaz de imaginar. Sabiendo que al rey le encantaba el ajedrez, el sirviente le dijo que le gustaría tener granos de trigo. Un grano en la primera casilla de un tablero de ajedrez, y el número de granos duplicándose en cada casilla sucesiva.
Calcula el número de granos de trigo en un tablero de ajedrez.
Un tablero de ajedrez tiene 64 casillas. La casilla 1 tiene un grano, la casilla 2 tiene dos granos, la casilla 3 tiene cuatro granos, y así sucesivamente, duplicándose cada vez.
Escribe código que calcule:
Según la documentación de PHP, existe un valor máximo para los enteros:
El tamaño de un
intdepende de la plataforma, aunque el valor máximo habitual es de unos dos mil millones (es decir, 32 bits con signo). Las plataformas de 64 bits suelen tener un valor máximo de unos 9E18. PHP no admiteintsin signo.
En otras palabras, PHP no puede expresar como entero ningún número mayor o igual que 2^63.
Algunos de los tests de este ejercicio requieren enteros de 64 bits (2^64), lo cual supera el límite de tamaño de los enteros de PHP.
PHP convierte automáticamente los int en float cuando los números se hacen demasiado grandes:
Si PHP se encuentra con un número que supera los límites del tipo
int, lo interpretará como unfloat. Además, una operación cuyo resultado supere los límites del tipointdevolverá unfloat.
Pero el tipo float tiene una precisión limitada.
Y el rey odia la imprecisión.
Así que el rey ha decidido que los resultados de los cálculos se esperen como un string que exprese el valor entero, en lugar de expresar la respuesta como int o float.
Y quiere cálculos con enteros, no una mera conversión perezosa al final.
¿Puedes resolverlo evitando directamente los números que sean más grandes de lo que el lenguaje permite?
Y, por favor, no uses tampoco otras bibliotecas de PHP como gmp o bc.
Regístrate en Exercism para aprender y dominar PHP con 11 conceptos122 ejercicios y mentoría humana real, todo gratis.