Μια φορά κι έναν καιρό ήταν ένας σοφός υπηρέτης που έσωσε τη ζωή ενός πρίγκιπα. Ο βασιλιάς υποσχέθηκε να πληρώσει ό,τι μπορούσε να ονειρευτεί ο υπηρέτης. Γνωρίζοντας ότι ο βασιλιάς αγαπούσε το σκάκι, ο υπηρέτης είπε στον βασιλιά ότι θα ήθελε να πάρει κόκκους σιταριού. Έναν κόκκο στο πρώτο τετράγωνο μιας σκακιέρας, με τον αριθμό των κόκκων να διπλασιάζεται σε κάθε επόμενο τετράγωνο.
Υπολόγισε τον αριθμό των κόκκων σιταριού σε μια σκακιέρα.
Μια σκακιέρα έχει 64 τετράγωνα. Το τετράγωνο 1 έχει έναν κόκκο, το τετράγωνο 2 έχει δύο κόκκους, το τετράγωνο 3 έχει τέσσερις κόκκους, και ούτω καθεξής, διπλασιάζοντας κάθε φορά.
Γράψε κώδικα που υπολογίζει:
Σύμφωνα με την τεκμηρίωση της PHP υπάρχει μια μέγιστη ακέραια τιμή:
Το μέγεθος ενός
intεξαρτάται από την πλατφόρμα, αν και συνήθως η μέγιστη τιμή είναι περίπου δύο δισεκατομμύρια (δηλαδή 32 bit με πρόσημο). Οι πλατφόρμες 64 bit έχουν συνήθως μέγιστη τιμή περίπου 9E18. Η PHP δεν υποστηρίζειintχωρίς πρόσημο.
Με άλλα λόγια, η PHP δεν μπορεί να αναπαραστήσει ως ακέραιο κανέναν αριθμό 2^63 ή μεγαλύτερο.
Κάποια από τα τεστ αυτής της άσκησης απαιτούν ακέραιους 64 bit (2^64), που ξεπερνούν τον περιορισμό μεγέθους ακεραίων της PHP.
Η PHP μετατρέπει αυτόματα τα int σε float, όταν οι αριθμοί γίνουν πολύ μεγάλοι:
Αν η PHP συναντήσει έναν αριθμό πέρα από τα όρια του τύπου
int, θα τον ερμηνεύσει ωςfloat. Επίσης, μια πράξη που έχει ως αποτέλεσμα έναν αριθμό πέρα από τα όρια του τύπουintθα επιστρέψειfloat.
Όμως ο τύπος float έχει περιορισμένη ακρίβεια.
Και ο Βασιλιάς μισεί την ανακρίβεια.
Έτσι, ο Βασιλιάς αποφάσισε να περιμένει τα αποτελέσματα των υπολογισμών ως συμβολοσειρά που εκφράζει την ακέραια τιμή, αντί να εκφράζει την απάντηση ως int ή float.
Και θέλει ακέραιους υπολογισμούς, όχι απλώς μια τεμπέλικη μετατροπή στο τέλος.
Μπορείς να το λύσεις αποφεύγοντας αριθμούς που είναι μεγαλύτεροι από ό,τι επιτρέπει άμεσα η γλώσσα;
Και σε παρακαλώ μη χρησιμοποιήσεις ούτε άλλες βιβλιοθήκες PHP όπως οι gmp ή bc.
Γράψου στο Exercism για να μάθεις και να κατακτήσεις PHP με 11 έννοιες122 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.