روزی روزگاری، خدمتکار دانایی بود که جانِ شاهزادهای را نجات داد. پادشاه وعده داد هر آنچه خدمتکار به ذهنش برسد، بپردازد. خدمتکار که میدانست پادشاه عاشق شطرنج است، به پادشاه گفت که دانههای گندم میخواهد. یک دانه روی خانهی اول صفحهی شطرنج و در هر خانهی بعدی، تعداد دانهها دو برابر میشود.
تعداد دانههای گندم روی یک صفحهی شطرنج را محاسبه کنید.
یک صفحهی شطرنج ۶۴ خانه دارد. خانهی ۱ یک دانه دارد، خانهی ۲ دو دانه دارد، خانهی ۳ چهار دانه دارد و به همین ترتیب، هر بار دو برابر میشود.
کدی بنویسید که این موارد را محاسبه کند:
بر اساس مستندات PHP یک حداکثر مقدار برای اعداد صحیح وجود دارد:
اندازهی یک
intبه پلتفرم وابسته است، هرچند حداکثر مقدار آن معمولاً حدود دو میلیارد است (یعنی ۳۲ بیت علامتدار). پلتفرمهای ۶۴ بیتی معمولاً حداکثر مقداری حدود ۹E۱۸ دارند. PHP ازintهای بدون علامت پشتیبانی نمیکند.
به عبارت دیگر، PHP نمیتواند هیچ عددی بزرگتر یا مساوی 2^63 را بهصورت عدد صحیح بیان کند.
برخی از آزمونهای این تمرین به اعداد صحیح ۶۴ بیتی (2^64) نیاز دارند که از محدودیت اندازهی اعداد صحیح در PHP فراتر میرود.
PHP بهطور خودکار intها را زمانی که اعداد بیش از حد بزرگ میشوند به float تبدیل میکند:
اگر PHP به عددی فراتر از محدودهی نوع
intبرخورد کند، آن را بهصورتfloatتفسیر میکند. همچنین عملیاتی که نتیجهاش عددی فراتر از محدودهی نوعintباشد، یکfloatبرمیگرداند.
اما نوع float دقت محدودی دارد.
و King از بیدقتی متنفر است.
بنابراین King تصمیم گرفت نتیجهی محاسبات را بهصورت رشتهای که مقدار عدد صحیح را بیان میکند انتظار داشته باشد، نه بهصورت int یا float.
و او محاسبات عدد صحیح میخواهد، نه یک تبدیل تنبل در انتها.
آیا میتوانید این را با پرهیز از اعدادی که بزرگتر از آنچه این زبان مستقیماً اجازه میدهد هستند حل کنید؟
و لطفاً از کتابخانههای دیگر PHP مانند gmp یا bc هم استفاده نکنید.