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.
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:
De acordo com a documentação do PHP, existe um valor máximo para os números inteiros:
O tamanho de um
intdepende 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 suportaints 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 umfloat. Além disso, uma operação cujo resultado ultrapasse os limites do tipointdevolve umfloat.
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.
Inscreve-te no Exercism para aprenderes e dominares PHP com 11 conceitos122 exercícios, e mentoria humana real, tudo grátis.