额~ 用快速幂解决问题 使时间复杂度最简可以达到o(log2n)以内。。。。。还请大牛们多多指教。
因为 x^n=(x^n/2)^2
第一种是用递归的思想:
int pow(int x, int n)
{
if(n==1) return x;
else if(n&1) //表示n为奇数
return x*pow(x,n/2);
else return pow(x,n/2);
}
而第二种是不用递归的思想(但是思路还是一样的):
int pow(int x, int n)
{
int temp(x),rest (1); //直接初始化
while(n)
{
if(n&1)
rest*=temp;
else
temp*=temp;
n>>=1; //这个地方是表示将n的2进制数向右移一位,及n变为n/2
}
return rest;
}