[LeetCode]实现数学计算
乘方
思路是:pow(x,n) = pow(x,n/2)*pow(x,n-n/2)
递归实现
public double myPow(double x, int n) { if (n==0) return 1.0; else if (n>0) { double half = (double) myPow(x,n/2); if (n%2==0) return half*half; else return half*half*x; } else { if (n==Integer.MIN_VALUE) { double half = myPow(x,n/2); return (half*half); } n=-n; double half = myPow(x,n/2); if (n%2==0) return 1.0/(half*half); else return 1.0/(half*half*x); } }
开方
二分法或者牛顿法
public int mySqrt(int x) { /* 二分法一个一个寻找答案 */ if (x==0) return 0; long sta = 1; long end = x/2+1; while (sta<end) { long mid = (sta+end)/2; long cur = mid*mid; if (cur==x) return (int)mid; if (cur>x) end = mid-1; else sta = mid+1; } return (int)sta; }