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 tudo o que o servo conseguisse 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 a duplicar em cada casa seguinte.

Instruções

Calcula o número de grãos de trigo num 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, duplicando a cada casa.

Escreve código que calcule:

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

Valor máximo de um número inteiro

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

O tamanho de um int depende da plataforma, embora o valor máximo habitual seja cerca de dois mil milhões (ou seja, 32 bits com sinal). As plataformas de 64 bits têm normalmente um valor máximo de cerca de 9E18. O PHP não suporta ints sem sinal.

Por outras palavras, o PHP não consegue representar como número inteiro qualquer número 2^63 ou superior. Alguns dos testes deste exercício exigem números inteiros de 64 bits (2^64), o que ultrapassa o limite de tamanho dos números inteiros do PHP.

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

Se o PHP encontrar um número que ultrapasse os limites do tipo int, esse número será interpretado como um float. Além disso, uma operação cujo resultado ultrapasse os limites do tipo int devolve um float.

Mas o tipo float tem precisão limitada. E o King detesta imprecisão. Por isso, o King decidiu esperar os resultados dos cálculos como uma string que exprime o valor inteiro, em vez de exprimir a resposta como int ou float. E quer cálculos com números inteiros, não apenas uma conversão preguiçosa no fim.

Consegues resolver isto evitando números maiores do que aqueles que a linguagem permite diretamente? E, por favor, também não uses outras bibliotecas PHP como gmp ou bc.

Editar via GitHub A ligação abre numa nova janela ou separador
PHP Exercism

Estás pronto para começar Grãos?

Inscreve-te no Exercism para aprenderes e dominares PHP com 11 conceitos122 exercícios, e mentoria humana real, tudo grátis.