题解 | #剪绳子(进阶版)# 官方代码+注释

剪绳子(进阶版)

https://www.nowcoder.com/practice/106f666170554379ab1974e5a601e741

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param number long长整型 
     * @return long长整型
     */

    long long mod = 998244353;
    // 快速乘法
    long long fast(long long x, long long y){
        long long res = 0;
        x %= mod;
        y %= mod;
        while(y){
            if(y & 1){
                //加法代替乘法,防止越界
                res += x;
                if(res > mod){
                    res -= mod;
                }
            }
            y = y >> 1;
            x = x << 1;
            if(x >= mod){
                x -= mod;
            }
        }
        return res;
    }
    // 快速幂
    long long Pow(long long x, long long y){
        long long res = 1;
        // 每次处理一个平方
        while(y){
            // 如果是指数为奇数则将其转换为偶数的处理逻辑
            if(y & 1){
                // 将奇数的部分直接乘到结果上,再处理其余偶数的部分
                res = fast(res, x);
            }
            // 叠加
            x = fast(x, x);
            // 更新y值
            y = y >> 1;
        }
        return res;
    }
    long long cutRope(long long number) {
        // write code here
        if(number <= 3){
            return number-1;
        }
        if(number % 3 == 0){
            return Pow(3, number / 3);
        }else if(number % 3 == 1){
            return fast(Pow(3, number / 3 - 1), 4);
        }else{
            // 最后剩余2的情况
            return fast(Pow(3, number / 3), 2);
        }
    }
};



























全部评论

相关推荐

10-15 09:13
已编辑
天津大学 soc前端设计
点赞 评论 收藏
分享
11-15 19:28
已编辑
蚌埠坦克学院 硬件开发
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务