- base=0,exponent<0是非法输入,给用户提示输入错误
- 提高运算效率:
public class 剑指Offer_16_数值的整数次方 {
public double myPow(double x, int n) {
if (n == 0) return 1;
if (n == -1) return 1 / x;
double haft = myPow(x, n >> 1);
haft *= haft;
return (n & 1) == 1 ? haft * x : haft;
}
public double myPow2(double x, int n) {
long y = n < 0 ? -((long) n) : n;
double res = 1;
while (y > 0) {
if ((y & 1) == 1) res *= x;
x *= x;
y >>= 1;
}
return x < 0 ? (1 / res) : res;
}
public static int powMod1(int x, int y, int z) {
if (y < 0 || z == 0 )return 0;
int res =1 % z;
while (y > 0 ){
if ((y & 1) == 1){
res = (res*x) % z;
}
x = (x * x)%z;
y>>=1 ;
}
return res;
}
public static int powMod(int x, int y, int z) {
if (y < 0 || z == 0) return 0;
if (y == 0) return 1 % z;
int half = powMod(x, y >> 1, z);
half *= half;
if ((y & 1) == 0) {
return half % z;
} else {
return (half * (x % z)) % z;
}
}
}