C语言求剪绳子(进阶版)
解题思路
对于一段绳子16米 切割方式为 3 3 3 3 2 2,要想乘积足够大,需要优先切割段数3米,其次是2米,不能含有1,这道题就简化成了一个求快速幂的题型。先计算绳子能分多少个3米 多少个2米 然后求快速幂。
递归求快速幂
求 3^7为例,递归为 3*3^6 而3^6可以递归为 3^3 * 3^3,进行递归
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param number long长整型
* @return long长整型
* C语言声明定义全局变量请加上static,防止重复定义
*/
long long mypow(int base,long long m){
if(m==0)
return 1;
if(m%2==1){
return base*mypow(base,m-1)%998244353;
}
else{
long long temp=mypow(base,m/2);
return temp*temp%998244353;
}
}
long long cutRope(long long number ) {
// write code here
if(number==2)
return 1;
if(number==3)
return 2;
//其余的按照2 3 3 3 3的方式切割 不能有1
long long count2=0;
//含有3 的个数
long long count3=number/3;
//除3 余1 需要拿出来一个3 凑两个2
if(number%3==1){
count3--;
count2=2;
return (mypow(3,count3)*4%998244353);
}
//除3 余2
else if(number%3==2){
count2=1;
return (mypow(3,count3)*2%998244353);
}
return mypow(3,count3);
}