只提供思路,代码无法执行
题目:实现函数double Power(double base,int exponent),求base的exponent次方,不适用库函数,同时不需要考虑大数问题。
测试用例:exponent为负数
exponent为正数,base为0.
double Power(double base,int exponent){
if(base==0.0 && exponent<0){
return 0.0
}
int absExponent = int( exponent)
if(exponent<0)
absExponent = 0 - exponent;
double result = PowerCaculation(base,absExponent );
if(exponent<0)
result = 1.0/result
return result
}
double PowerCaculation(int base,int absExponent ){
double result = 1.0;
for(int i=0;i<absExponent;i++){
result *=base;
}
return result
}
评价:考虑了异常情况,但是时间效率为O(exponent)
解法2:将result *=base改为 result *=result, 时间效率为O(logn).
double PowerCaculation(int base,int absExponent){
double result = 1.0
if absExponent == 0
return 1
if abs Exponent ==1
return base;
double result = PowerCaculation(base,absExponent>>1)
result *=result;
if(result &1 ==1)
result *=base
return result.
}
网友评论