剑指offer第12题:
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
理解:
因为equals不能用于基本变量类型,只能用于字符串等引用类型(“==”用于基本类型)。因此需要自己写一个equal方法,考虑到浮点类型丧失精确度有误差。再写一个用于常规指数运算的for循环power方法。另外要考虑底数、指数为0等特殊情况。
public class Solution {
public double Power(double base, int exponent) {
//如果底数为0
if(equal(base, 0)){
return 0;
}
//如果指数为0
if(equal(exponent, 0)){
return 1;
}
//常规情况
double result;
if(exponent > 0){
result = power(base, exponent);
}
else{
result = power(1/base, -exponent);
}
return result;
}
//比较方法
public boolean equal(double number1, double number2){
if(number1-number2 < 0.0000001 && number2-number1 < 0.0000001){
return true;
}else{
return false;
}
}
//次方运算方法
public double power(double base, int exponent){
double result = 1;
for(int i = 0; i < exponent; i++){
result *= base;
}
return result;
}
}
知识点:
- 浮点运算;
- equals方法;
- “==”与equals区别;
- 基本数据类型不能用equals方法