C'era una volta un servo saggio che salvò la vita a un principe. Il re promise di pagare qualunque cosa il servo avesse potuto immaginare. Sapendo che il re amava gli scacchi, il servo disse al re che avrebbe voluto dei chicchi di grano. Un chicco sulla prima casella di una scacchiera, con il numero di chicchi che raddoppia a ogni casella successiva.
Calcola il numero di chicchi di grano su una scacchiera.
Una scacchiera ha 64 caselle. La casella 1 ha un chicco, la casella 2 ha due chicchi, la casella 3 ha quattro chicchi, e così via, raddoppiando ogni volta.
Scrivi il codice che calcola:
Secondo la documentazione di PHP esiste un valore intero massimo:
La dimensione di un
intdipende dalla piattaforma, anche se il valore massimo usuale è di circa due miliardi (ovvero 32 bit con segno). Le piattaforme a 64 bit di solito hanno un valore massimo di circa 9E18. PHP non supporta gliintsenza segno.
In altre parole, PHP non può esprimere come intero alcun numero maggiore o uguale a 2^63.
Alcuni test di questo esercizio richiedono interi a 64 bit (2^64), che vanno oltre il limite di dimensione degli interi di PHP.
PHP converte automaticamente gli int in float, quando i numeri diventano troppo grandi:
Se PHP incontra un numero oltre i limiti del tipo
int, questo verrà interpretato come unfloat. Inoltre, un'operazione che produce un numero oltre i limiti del tipointrestituirà unfloat.
Ma il tipo float ha una precisione limitata.
E il re odia l'imprecisione.
Così il re ha deciso di aspettarsi i risultati dei calcoli come stringa che esprime il valore intero, invece di esprimere la risposta come int o float.
E vuole calcoli con numeri interi, non una semplice conversione pigra alla fine.
Riesci a risolverlo evitando i numeri più grandi di quelli che il linguaggio permette direttamente?
E per favore non usare neanche altre librerie PHP come gmp o bc.
Iscriviti a Exercism per imparare e padroneggiare PHP con 11 concetti122 esercizi e il mentoring di persone reali, tutto gratis.