您的位置:首页 > 职场人生

剑指offer 面试题11 数值的整数次方

2014-07-15 18:47 525 查看
E:\arithmetic\Power

O(lgn) 二分法

注意:整数可能是正、负、零

#include <stdio.h>
double power(double base, int exponent);
int main(int argc, char *argv[])
{//测试用例:指数分别为整数、负数、基数、偶数、0;底数为0
double r;
r = power(2, 3);
printf("%lf\t", r);
r = power(2, -3);
printf("%lf\t", r);
r = power(2, 4);
printf("%lf\t", r);
r = power(1, 3);
printf("%lf\t", r);
r = power(2, 0);
printf("%lf\t", r);
r = power(0, 0);
printf("%lf\t", r);
return 0;
}

double power(double base, int exponent){
if(exponent == 0){
if((base<0.000001)&&(-0.000001<base)){//!!!
printf("error !0 power 0!\n");
return 0;
}
return 1;

}
double result = base;
int ex = exponent;
if(exponent < 0){
ex = (-1)*exponent;
}
int i;
for(i=0 ; i<(ex>>1) ; i++){//!!!
result *= result;
}
if(ex&0x01)//&
result *= base;
if(exponent < 0)
result = 1/result;
return result;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: