剑指Offer面试题11[数值的整数次方]

来源:互联网 发布:淘宝店主照片认证 编辑:程序博客网 时间:2024/05/19 00:47

1.题目描述:

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。不得使用库函数,不需要考虑大数问题。

2.相关知识:

需要考虑边界条件,特殊情况,保证代码的可靠性。本题中base可能是0,exponent可能是0或者负数。

3. 解答思路:

1) 对边界条件进行处理
2) 求指数的快速乘方算法,递归实现

an={a(n/2)a(n/2)a(n1)/2a(n1)/2nn

4. 代码实现:

#include<stdio.h>int isInvalid = 0;//递归算法double PowerWithUnsignedExpoent(double base, unsigned int exponent){    if(exponent == 0)        return 1;    else if(exponent == 1)        return base;    double result = PowerWithUnsignedExpoent(base, exponent>>1);    result = result * result;    if (exponent & 0x01 == 1) //奇数        result = result * base;    return result;}double Power(double base, int exponent){    double delta = 1e-8;    if ((-delta<base && base<delta) && (exponent < 0))    {        isInvalid = 1;        return 0.0;    }    unsigned int absExponent = 0;    if(exponent<0)        absExponent = (unsigned int)(-exponent);    else        absExponent = (unsigned int)(exponent);    double result = PowerWithUnsignedExpoent(base, absExponent);    if(exponent < 0)        result = 1/result;    return result;}void main(){    double base = 2;    int exponent = -3;    printf("result: %f\n", Power(base, exponent));}
原创粉丝点击