publicdoublemyPow(double x, int n){ //n是32位有符号整数,其数值范围是[−2^31, 2^31 − 1]。 //如果直接将其 -n 转化为正数,有可能导致溢出 //所以采用long类型储存n long N = n;
if (N < 0) { x = 1 / x; N = -N; } double ans = 1; double current_product = x;
for (long i = N; i > 0; i /= 2) { if ((i % 2) == 1) { ans = ans * current_product; } current_product = current_product * current_product; } return ans; }