Жив колись мудрий слуга, який урятував життя принцу. Король пообіцяв дати йому все, що той зможе забажати. Знаючи, що король любить шахи, слуга попросив зерна пшениці. Одне зерно на першій клітинці шахівниці, а на кожній наступній кількість зерен подвоюється.
Обчисліть кількість зерен пшениці на шахівниці.
Шахівниця має 64 клітинки. На клітинці 1 лежить одне зерно, на клітинці 2 лежать два зерна, на клітинці 3 лежать чотири зерна, і так далі, щоразу кількість подвоюється.
Напишіть код, який обчислює:
Згідно з документацією PHP, існує максимальне значення цілого числа:
Розмір
intзалежить від платформи, хоча максимальне значення близько двох мільярдів є звичним (це 32 біти зі знаком). 64-бітні платформи зазвичай мають максимальне значення близько 9E18. PHP не підтримує беззнаковіint.
Іншими словами, PHP не може подати жодне число 2^63 або більше як ціле число.
Деякі тести для цієї вправи вимагають 64-бітних цілих чисел (2^64), а це виходить за межі обмеження розміру цілих чисел у PHP.
PHP автоматично перетворює int на float, коли числа стають завеликими:
Якщо PHP натрапить на число за межами типу
int, його буде інтерпретовано якfloat. Так само операція, результатом якої є число за межами типуint, повернеfloat.
Але тип float має обмежену точність.
А Король не терпить неточності.
Тож Король вирішив приймати результати обчислень як рядок тексту (англ. string), що виражає ціле значення, а не як відповідь у вигляді int чи float.
І він хоче цілочисельних обчислень, а не просто лінивого перетворення наприкінці.
Чи можемо ми розвʼязати це, уникаючи чисел, більших за ті, які мова дозволяє безпосередньо?
І, будь ласка, не використовуймо також інших бібліотек PHP, як-от gmp чи bc.
Зареєструйтеся на Exercism, щоб вивчати й опановувати PHP, а також 11 концепцій122 вправи та справжнє наставництво від людей, і все це безкоштовно.