Kurzusok
/
PHP
PHP
/
Feladatok
/
Gabonaszemek
Gabonaszemek

Gabonaszemek

Közepes

Bevezetés

Volt egyszer egy bölcs szolga, aki megmentette egy herceg életét. A király megígérte, hogy megadja neki mindazt, amit a szolga csak kigondol. A szolga tudta, hogy a király szeret sakkozni, ezért azt kérte tőle, hogy búzaszemeket kapjon. Egy szem a sakktábla első mezőjén, a szemek száma pedig minden következő mezőn megduplázódik.

Utasítások

Számítsd ki, hány búzaszem van egy sakktáblán.

A sakktábla 64 mezőből áll. Az 1. mezőn egy szem van, a 2. mezőn kettő, a 3. mezőn négy, és így tovább, minden mezőn megduplázódik a szemek száma.

Írj kódot, amely kiszámítja:

  • az adott mezőn lévő szemek számát
  • a sakktáblán lévő szemek összes számát

Maximális egészérték

A PHP dokumentációja szerint az egész számoknak van egy maximális értéke:

Az int mérete platformfüggő, bár a maximális értéke általában körülbelül kétmilliárd (ez a 32 bites előjeles tartomány). A 64 bites platformokon a maximális érték általában körülbelül 9E18. A PHP nem támogatja az előjel nélküli int-eket.

Más szóval a PHP semmilyen 2^63-nal egyenlő vagy annál nagyobb számot nem tud egész számként kifejezni. A feladat néhány tesztje 64 bites egészeket (2^64) vár el, ami túllépi a PHP egész számokra vonatkozó mérethatárát.

A PHP automatikusan átalakítja az int-eket float-tá, amikor a számok túl nagyok lesznek:

Ha a PHP olyan számba fut bele, amely túllépi az int típus határait, akkor azt float-ként értelmezi. Illetve egy olyan művelet, amelynek eredménye túllépi az int típus határait, szintén float-ot ad vissza.

A float típusnak azonban korlátozott a pontossága. És a király utálja a pontatlanságot. Ezért a király úgy döntött, hogy a számítások eredményét olyan stringként várja el, amely az egész értéket fejezi ki, nem pedig int vagy float formában. Ráadásul egész számokkal végzett számításokat akar, nem csak egy lusta átalakítást a végén.

Meg tudod oldani úgy, hogy elkerülöd a nyelv által közvetlenül megengedettnél nagyobb számokat? És kérlek, ne használj más PHP-könyvtárakat, például a gmp-t vagy a bc-t sem.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
PHP Exercism

Készen állsz elkezdeni a(z) Gabonaszemek feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) PHP nyelvet 11 fogalom122 feladat segítségével, valódi emberi mentorálással, mindez ingyen.