دانه

دانه

متوسط

مقدمه

روزی روزگاری، خدمتکار دانایی بود که جانِ شاهزاده‌ای را نجات داد. پادشاه وعده داد هر آنچه خدمتکار به ذهنش برسد، بپردازد. خدمتکار که می‌دانست پادشاه عاشق شطرنج است، به پادشاه گفت که دانه‌های گندم می‌خواهد. یک دانه روی خانه‌ی اول صفحه‌ی شطرنج و در هر خانه‌ی بعدی، تعداد دانه‌ها دو برابر می‌شود.

دستورالعمل‌ها

تعداد دانه‌های گندم روی یک صفحه‌ی شطرنج را محاسبه کنید.

یک صفحه‌ی شطرنج ۶۴ خانه دارد. خانه‌ی ۱ یک دانه دارد، خانه‌ی ۲ دو دانه دارد، خانه‌ی ۳ چهار دانه دارد و به همین ترتیب، هر بار دو برابر می‌شود.

کدی بنویسید که این موارد را محاسبه کند:

  • تعداد دانه‌های روی یک خانه‌ی مشخص
  • تعداد کل دانه‌ها روی صفحه‌ی شطرنج

حداکثر مقدار عدد صحیح

بر اساس مستندات 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 هم استفاده نکنید.

ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
PHP Exercism

آماده‌اید دانه را شروع کنید؟

در Exercism ثبت‌نام کنید تا PHP را همراه با 11 مفهوم122 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.