📌  相关文章
📜  PHP |检查一个数字是否是阿姆斯壮数字(1)

📅  最后修改于: 2023-12-03 15:18:27.215000             🧑  作者: Mango

PHP | 检查一个数字是否是阿姆斯壮数字

阿姆斯壮数字,又称自恋数或阿姆斯特朗数,指的是一个 n 位数(n≥3),它的每个数字的 n 次幂之和等于它本身。例如:1^3 + 5^3 + 3^3 = 153。

如何检查一个数字是否是阿姆斯壮数字?我们可以按照如下步骤实现一个 PHP 函数:

实现步骤
  1. 判断输入的数字是否为正整数,若不是则直接返回 false
  2. 将输入的数字转换为字符串并计算其位数。
  3. 遍历字符串中的每个字符,将每个数字的 n 次幂相加,并与原数字进行比较。
  4. 如果相等,则返回 true,否则返回 false
代码实现
/**
 * 检查一个正整数是否是阿姆斯壮数字 
 * @param int $num 待检查的数字
 * @return bool
 */
function isArmstrongNumber(int $num): bool
{
    // 不是正整数,直接返回 false
    if ($num <= 0 || !is_integer($num)) {
        return false;
    }

    // 将数字转换为字符串并计算其位数
    $digits = str_split(strval($num));
    $n = count($digits);

    // 计算每个数字的 n 次幂相加的和
    $sum = 0;
    foreach ($digits as $digit) {
        $sum += pow($digit, $n);
    }

    // 判断是否为阿姆斯壮数字
    return $sum == $num;
}
测试样例

下面是一些测试样例:

assert(isArmstrongNumber(153) == true);
assert(isArmstrongNumber(9474) == true);
assert(isArmstrongNumber(407) == true);
assert(isArmstrongNumber(1634) == true);
assert(isArmstrongNumber(370) == true);
assert(isArmstrongNumber(371) == true);
assert(isArmstrongNumber(0) == false);
assert(isArmstrongNumber(-153) == false);
assert(isArmstrongNumber(100) == false);
assert(isArmstrongNumber(888) == false);
assert(isArmstrongNumber(947) == false);

其中 assert 是一个 PHP 自带的断言函数,用于判断某个表达式是否为 true,如果结果为 false,则会抛出错误,并输出提示信息。这样可以方便地进行测试和调试。