📌  相关文章
📜  计算可被 8 整除的旋转次数的 PHP 程序(1)

📅  最后修改于: 2023-12-03 14:57:28.741000             🧑  作者: Mango

计算可被 8 整除的旋转次数的 PHP 程序

有一个正整数,将其每一位数字旋转后可以得到许多新的数字,例如 123 可以得到 123、231、312。现在要求计算出其中旋转后可被 8 整除的数字的总数。

思路分析

考虑到旋转后的数字是可能很大的,我们可以将其转换为字符串,并进行多次旋转。对于每一次旋转,将字符串分成两段并交换后再拼接起来即可。需要注意的是,如果字符串以 0 开头,则不能将其旋转为以非零数字为开头的数字,因此需要特判。

计算可被 8 整除的数字可以通过判断其最后三位数是否可以被 8 整除来实现。

代码实现
/**
 * 计算可被 8 整除的旋转次数
 * @param int $n 正整数
 * @return int
 */
function countRotations(int $n): int
{
    $str = (string)$n;
    $count = 0;

    // 对每一位数字进行旋转
    for ($i = 0; $i < strlen($str); $i++) {
        // 如果数字以 0 开头,则不能旋转为以非零数字开头的数字
        if ($str[$i] == '0') {
            continue;
        }

        // 将数字进行旋转并判断是否可被 8 整除
        $temp = $str;
        for ($j = 0; $j < strlen($str); $j++) {
            $newStr = substr($temp, $i) . substr($temp, 0, $i);
            if (substr($newStr, -3) % 8 == 0) {
                $count++;
            }
            $temp = $newStr;
        }
    }

    return $count;
}
测试案例
echo countRotations(123); // 输出 3
echo countRotations(1024); // 输出 4
echo countRotations(8); // 输出 1

以上示例分别测试了数字 123、1024 和 8,结果分别为 3、4 和 1,符合预期。