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.
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:
De acordo com a documentação do PHP, existe um valor máximo para inteiros:
O tamanho de um
intdepende 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 aints 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 umfloat. Além disso, uma operação que resulte em um número além dos limites do tipointretornará umfloat.
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.
Crie sua conta no Exercism para aprender e dominar PHP com 11 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.