Había una vez un sirviente sabio que salvó la vida de un príncipe. El rey prometió pagarle lo que el sirviente fuera capaz de imaginar. Como sabía que al rey le encantaba el ajedrez, el sirviente le dijo que quería granos de trigo. Un grano en la primera casilla de un tablero de ajedrez, y el número de granos se duplicaba en cada casilla siguiente.
Calcula la cantidad de granos de trigo que hay 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 (eso es 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 2^63 o mayor.
Algunas de las pruebas 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 a 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 sea un número que supera 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 decidió esperar los resultados de los cálculos 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 solo una conversión perezosa al final.
¿Puedes resolver esto evitando los números que son más grandes de lo que el lenguaje permite usar directamente?
Y, por favor, tampoco uses 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.