轨道
/
PHP
PHP
/
练习
/
麦粒
麦粒

麦粒

中等

简介

从前有一位聪明的仆人,他救下了一位王子的性命。 国王答应,仆人想要什么,就赏他什么。 仆人知道国王喜欢下国际象棋,便告诉国王,他想要麦粒。 棋盘的第一格放一粒麦粒,之后每一格的数量都翻一倍。

说明

计算棋盘上的小麦粒数。

棋盘有 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,全部免费。