麥粒

麥粒

中等

簡介

從前有一位聰明的僕人,他救了王子的性命。 國王承諾,只要僕人想得出來,他都會賞賜。 僕人知道國王熱愛西洋棋,便告訴國王,他想要一些麥粒。 在棋盤的第一格放一粒麥子,之後每一格的麥粒數量都是前一格的兩倍。

說明

計算棋盤上的麥粒數量。

棋盤有 64 個格子。 第 1 格有 1 粒麥子,第 2 格有 2 粒麥子,第 3 格有 4 粒麥子,依此類推,每格加倍。

撰寫程式碼來計算:

  • 指定格子上的麥粒數量
  • 棋盤上的麥粒總數

整數最大值

根據 PHP 文件,整數有一個最大值:

int的大小取決於平台,不過最大值通常大約是 20 億(也就是 32 位元的有號整數)。 64 位元平台的常見最大值大約是 9E18。 PHP 不支援無號的int。

換句話說,PHP 無法把2^63或更大的數字表示成整數。 這個練習的部分測試需要 64 位元整數(2^64),這已經超出 PHP 的整數大小限制。

當數字太大時,PHP 會自動把int轉成float:

如果 PHP 遇到超出int型別範圍的數字,會改為將它解讀成float。 此外,運算結果若超出int型別的範圍,也會改為回傳float。

但float型別精確度有限。 而國王討厭不精確。 所以國王決定,要你把計算結果用能表示整數值的字串來呈現,而不是把答案表示成int或float。 而且他要的是整數運算,不是最後才偷懶地轉換一下。

你有辦法避開那些超過這個語言直接允許範圍的數字來解這題嗎? 另外,也請不要使用gmp或bc這類其他的 PHP 函式庫喔。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
PHP Exercism

準備好開始 麥粒 了嗎?

註冊 Exercism,透過 11 個概念122 個練習 和真人引導來學習並精通 PHP,全部免費。