Grãos

Grãos

Médio

Introdução

Era uma vez um servo sábio que salvou a vida de um príncipe. O rei prometeu pagar o que o servo fosse capaz de imaginar. Sabendo que o rei adorava xadrez, o servo disse ao rei que gostaria de receber grãos de trigo. Um grão na primeira casa de um tabuleiro de xadrez, com o número de grãos dobrando a cada casa seguinte.

Instruções

Calcule o número de grãos de trigo em um tabuleiro de xadrez.

Um tabuleiro de xadrez tem 64 casas. A casa 1 tem um grão, a casa 2 tem dois grãos, a casa 3 tem quatro grãos, e assim por diante, dobrando a cada vez.

Escreva um código que calcule:

  • o número de grãos em uma determinada casa
  • o número total de grãos no tabuleiro de xadrez

Valor máximo de inteiro

De acordo com a documentação do PHP, existe um valor máximo para inteiros:

O tamanho de um int depende da plataforma, embora o valor máximo de cerca de dois bilhões seja o usual (ou seja, 32 bits com sinal). Plataformas de 64 bits costumam ter um valor máximo de cerca de 9E18. O PHP não dá suporte a ints sem sinal.

Em outras palavras, o PHP não consegue expressar como inteiro nenhum número 2^63 ou maior. Alguns dos testes deste exercício exigem inteiros de 64 bits (2^64), o que está além do limite de tamanho de inteiro do PHP.

O PHP converte automaticamente ints em floats quando os números ficam grandes demais:

Se o PHP encontrar um número além dos limites do tipo int, ele será interpretado como um float. Além disso, uma operação que resulte em um número além dos limites do tipo int retornará um float.

Mas o tipo float tem precisão limitada. E o Rei detesta imprecisão. Então o Rei decidiu esperar os resultados dos cálculos como uma string que expressa o valor inteiro, em vez de expressar a resposta como int ou float. E ele quer cálculos com inteiros, não apenas uma conversão preguiçosa no final.

Você consegue resolver isso evitando números maiores do que a linguagem permite diretamente? E, por favor, também não use outras bibliotecas do PHP como gmp ou bc.

Editar via GitHub O link abre em uma nova janela ou aba
PHP Exercism

Tudo pronto para começar Grãos?

Crie sua conta no Exercism para aprender e dominar PHP com 11 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.