doublepower(double x, int n) { if (n == 0) return1; double res = power(x, n >> 1); //右移一位,相当于除以2 //判断指数是基数还是偶数,用位与代替% if (n & 0x1 == 1) { res = res * res * x; } else { res = res * res; } return res; } doublemyPow(double x, int n) { if (x == 0) return0; long num = n; if (n >= 0) { return power(x, num); } else { return power(1 / x, -num); } }
思路2:二分法
设res=1,则x^n=x^n*res=(x^2)^(n/2)res=…=(x^n)^1res
show me code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
doublemyPow(double x, int n){ if (x == 1 || n == 0) return1; double res = 1.0; long num = n;//int变量取负号可能越界 if (n < 0) { x = 1 / x; num = -num; } while (num > 0) { if (num % 2 == 1) res *= x; x *= x; num /= 2; } return res; }