标签:ams c99 margin pre tags pos visible param color
Implement pow(x, n), which calculates x raised to the power n (xn).
Example 1:
Input: 2.00000, 10
Output: 1024.00000
Example 2:
Input: 2.10000, 3
Output: 9.26100
Example 3:
Input: 2.00000, -2
Output: 0.25000
Explanation: 2-2 = 1/22 = 1/4 = 0.25
Note:
-100.0 < x < 100.0
n is a 32-bit signed integer, within the range [?231, 231 ? 1]
利用上一题的思路,直接转换成对数计算,注意边界条件即可
class Solution {
public double myPow(double x, int n) {
if(x == 0) return 0;
int sign = 1;
if(x < 0 && n % 2 != 0) sign = -1;
x = Math.abs(x);
return sign * Math.exp(n * Math.log(x));
}
}
另外快速幂,见剑指offer 16提
考虑分母不能为0即可
class Solution {
public double myPow(double x, int n) {
if(x == 0 && n <= 0) throw new RuntimeException();
if(n == 1) return x;
if(n == 0) return 1;
if(n == -1) return 1/x;
if(x == 0) return 0;
if(x == 1) return 1;
if( x== -1) return (n & 1) == 0 ? 1 : -1;
double even = myPow(x, n / 2);
return even * even * myPow(x, n % 2);
}
}
标签:ams c99 margin pre tags pos visible param color
原文地址:https://www.cnblogs.com/muche-moqi/p/12874023.html