题目描述:
自定义函数求正整数m的n次方。
分析:
一种方法是将m循环相乘n次,时间复杂度为O(n)。下面介绍一种O(logn)的解法。
第一步:将n用二进制表示,例如10的二进制为1010。
第二步:根据n的二进制的位数求解。如10的二进制位数为4,循环四次,可依次求出,,, ,再根据n的二进制哪些位为1再乘以相应的m次幂,即*。这样循环的次数即为n的二进制位数,代码如下:
long long mypow(int m, int n)
{
long long res = 1, tmp = m;
while (n != 0)
{
if (n & 1 != 0)
res *= tmp;
tmp *= tmp;
n >>= 1;
}
return res;
}