Es war einmal ein weiser Diener, der das Leben eines Prinzen rettete. Der König versprach, ihm alles zu geben, was er sich nur wünschen konnte. Der Diener wusste, dass der König Schach liebte, und bat ihn um Weizenkörner. Ein Korn auf dem ersten Feld eines Schachbretts, und auf jedem weiteren Feld sollte sich die Anzahl der Körner verdoppeln.
Berechne die Anzahl der Weizenkörner auf einem Schachbrett.
Ein Schachbrett hat 64 Felder. Feld 1 hat ein Korn, Feld 2 hat zwei Körner, Feld 3 hat vier Körner und so weiter, wobei sich die Anzahl jeweils verdoppelt.
Schreibe Code, der Folgendes berechnet:
Laut der PHP-Dokumentation gibt es einen maximalen Ganzzahlwert:
Die Größe eines
intist plattformabhängig, wobei ein Maximalwert von etwa zwei Milliarden der übliche Wert ist (das sind 32 Bit mit Vorzeichen). 64-Bit-Plattformen haben normalerweise einen Maximalwert von etwa 9E18. PHP unterstützt keine vorzeichenlosenints.
Anders gesagt: PHP kann keine Zahl 2^63 oder größer als Ganzzahl ausdrücken.
Einige der Tests für diese Übung benötigen 64-Bit-Ganzzahlen (2^64), was die Größengrenze für Ganzzahlen von PHP überschreitet.
PHP wandelt automatisch ints in floats um, wenn die Zahlen zu groß werden:
Wenn PHP auf eine Zahl stößt, die außerhalb des Wertebereichs des
int-Typs liegt, wird sie stattdessen alsfloatinterpretiert. Auch eine Operation, die eine Zahl außerhalb des Wertebereichs desint-Typs ergibt, liefert stattdessen einenfloat.
Aber der float-Typ hat eine begrenzte Genauigkeit.
Und King hasst Ungenauigkeit.
Also hat King entschieden, die Ergebnisse der Berechnungen als String zu erwarten, der den Ganzzahlwert ausdrückt, statt die Antwort als int oder float auszudrücken.
Und er will Ganzzahlberechnungen, nicht nur eine faule Umwandlung am Ende.
Kannst du das lösen, indem du Zahlen vermeidest, die größer sind, als die Sprache direkt zulässt?
Und bitte verwende auch keine anderen PHP-Bibliotheken wie gmp oder bc.
Melde dich bei Exercism an, um PHP mit 11 Konzepte122 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.