Granos

Granos

Media

Introducción

É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.

Instrucciones

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:

  • el número de granos en una casilla determinada
  • el número total de granos en el tablero de ajedrez

Valor máximo de un entero

Según la documentación de PHP, existe un valor máximo para los enteros:

El tamaño de un int depende 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 admite int sin 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 un float. Además, una operación cuyo resultado supere los límites del tipo int devolverá un float.

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.

Editar en GitHub El enlace se abre en una ventana o pestaña nueva
PHP Exercism

¿Listo para empezar Granos?

Regístrate en Exercism para aprender y dominar PHP con 11 conceptos122 ejercicios y mentoría humana real, todo gratis.