從前有一位聰明的僕人,他救了王子的性命。 國王承諾,只要僕人想得出來,他都會賞賜。 僕人知道國王熱愛西洋棋,便告訴國王,他想要一些麥粒。 在棋盤的第一格放一粒麥子,之後每一格的麥粒數量都是前一格的兩倍。
計算棋盤上的麥粒數量。
棋盤有 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 函式庫喔。