首页 > 其他 > 详细

剑指offer:数值的整数次方

时间:2014-03-26 14:44:27      阅读:406      评论:0      收藏:0      [点我收藏+]

题目:实现函数double pow(double base,int exp),求base的exp次方,不得使用库函数,同时不需要考虑大数问题。

要求:

1、考虑base为正数、负数、0的情况,

2、考虑exp为正数、负数、0的情况,


#include<stdio.h>

double double_pow_positive(double base,int exp);
int equal(double num1,double num2);

double double_pow(double base,int exp)
{
    if(double_equal(base,0)==1)
    {
        if(exp<=0)return -1;
        else return 0;
    }
    else
    {
        if(exp>=0)return double_pow_positive(base,exp);
        else return 1/double_pow_positive(base,exp);
    }
}
double double_pow_positive(double base,int exp)
{
    if(exp==0)return 0;
    else if(exp<0)exp=-exp;
    double result=1;
    int i=0;
    for(i=1;i<=exp;++i)
        result*=base;
    return result;
}
int double_equal(double num1,double num2)
{
    if(num1-num2<0.0000001&&num1-num2>-0.0000001)
        return 1;
    else return 0;
}
int main()
{
    double base=0;
    int exp=0;
    printf("请输入底数:\n");
    scanf("%lf",&base);
    printf("请输入指数:\n");
    scanf("%d",&exp);
    //printf("\n%f,%d\n",base,exp);
    printf("\n得到的结果是:%lf\n",double_pow(base,exp));
    return 0;
}

下面是结果的截图:

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

bubuko.com,布布扣

我们要考虑到特殊的情况,就是底数为0,指数为非正的情况,这时候我们返回-1,表示这样的情况下是错误的。


新颖的解法:

当然,这道题目也是有简单的解法的,就是我们对于无符号指数的时候,我们可以用这样的一个公式

n为偶数,a^n=a^(n/2)*a^(n/2)

n为奇数,a^n=a^((n-1)/2)*a^((n-1)/2)*a

这样通过递归的方法可以大大减少代码量,而且看起来比较通俗易懂。


剑指offer:数值的整数次方,布布扣,bubuko.com

剑指offer:数值的整数次方

原文:http://blog.csdn.net/litianpenghaha/article/details/22152025

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!