问题描述:

实现函数double Power(double base,int exponent),求base的exponent次方。不得使用库函数,

同时不需考虑大数问题。

思路分析:

要是你秒秒钟想到一个循环搞定估计面试没戏了。要考虑指数为0和负数的情况,如果底数也

为0了?为负数时就是相当于要求正数时的倒数,这是又要考虑分母为0.

参考代码:

bool g_inputInvalid = false;

double Power(double base,int exponnet)
{
    g_inputInvalid = false;
    if (Equal(base,0) && exponnet < 0)
    {
        g_inputInvalid = true;
        return 0.0;
    }
    unsigned int abExponent = (unsigned int)(-exponnet);
    if (abExponent < 0)
    {
        abExponent = -abExponent;
    }
    double result = PowerWithUnsignedExponent(base,abExponent);
    if (exponnet < 0)
    {
        result = 1.0/result;
    }
    return result;
}
double PowerWithUnsignedExponent(double base,unsigned int exponnet)
{
    if (exponnet == 0)
    {
        return 1;
    }
    if (exponnet == 1)
    {
        return base;
    }
    double result = PowerWithUnsignedExponent(base,exponnet>>1);//每次求出基数的偶数次方减少循环
    result *=result;//用了一公式a^n = a^(n/2)*a^(n/2) 或者a^n = a^((n-1)/2)*a^((n-1)/2)*a
    if (exponnet &0x1 == 1)//判断指数是偶数还是奇数,奇数要再乘一次底数
    {
        result *= base;
    }
    return result;
}
bool Equal(double nNum1,double nNum2)
{
    if ((nNum1-nNum2 > -0.0000001) && (nNum1-nNum2 < 0.0000001))
    {
        return true;
    }
    else
    {
        return false;
    }
}

思考:

一个细节得注意,在判断两个小数是否相等时不能直接用 == 去判断,因为在计算机内表示小数时都有误

差,所以只能判断它们的绝对值是不是在一个很小的范围内。

数值的N次方的更多相关文章

  1. 剑指Offer面试题:10.数值的整数次方

    一.题目:数值的整数次方 题目:实现函数double Power(doublebase, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 在.N ...

  2. 《剑指offer》面试题11: 数值的整数次方

    面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...

  3. 九度OJ 1514 数值的整数次方【算法】

    题目地址:http://ac.jobdu.com/problem.php?pid=1514 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的expo ...

  4. 1514:数值的整数次方 @jobdu

    题目1514:数值的整数次方 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:377 解决:103 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent. ...

  5. 用log(N)的解法实现数值的整数次方

    // // main.m // c++test // // Created by andyyang on 6/3/13. // Copyright (c) 2013 andyyang. All rig ...

  6. 剑指offer编程题Java实现——面试题11数值的整数次方

    题目: 实现函数double power(double base,int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 解题思路:最一般的方法实现数值 ...

  7. 《剑指offer》 数值的整数次方

    本题来自<剑指offer> 数值的整数次方 题目: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路: 代码从三个方面处 ...

  8. 【Java】 剑指offer(15) 数值的整数次方

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 实现函数double Power(double base, int ...

  9. 《剑指offer》第十六题(数值的整数次方)

    // 面试题:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需要考 ...

  10. 数值的整数次方(C++ 和 Python 实现)

    (说明:本博客中的题目.题目详细说明及参考代码均摘自 “何海涛<剑指Offer:名企面试官精讲典型编程题>2012年”) 题目 实现函数 double Power(double base, ...

随机推荐

  1. 锋利jQuery 学习整理之 第六章 jQuery 与Ajax 的应用

    1.Ajax 的XMLHttpRequest 对象 XMLHttpRequest 是Ajax 的核心,它是Ajax 实现的关键---发送异步请求.接受响应及执行回调都是通过它来完成的.XMLHttpR ...

  2. Constructing Roads In JGShining's Kingdom(HDU 1025 LIS nlogn方法)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  3. 学习ReactNative笔记整理一___JavaScript基础

    学习ReactNative笔记整理一___JavaScript基础 ★★★笔记时间- 2017-1-9 ★★★ 前言: 现在跨平台是一个趋势,这样可以减少开发和维护的成本.第一次看是看的ReactNa ...

  4. s3c2416裸跑环境配置

    最近刚刚开始学习ARM-linux,上周买了块tq2416的板子,给的Linux资料太复杂太深奥不愿看,等不及想要把2416跑起来.于是到处找相关裸跑资料,可是用2416的人实在少,网上的资料更少,裸 ...

  5. JavaScript实现网页右下角弹出窗口代码

    <script language="JavaScript"><!--var no = 50;var speed = 1;var ns4up = (document ...

  6. 浅谈JS数据类型存储问题

    背景       一个经典的问题,先抛出来给大伙看看: var a = "黑MAO"; var b = a; var c = new Object(); var d = c; a ...

  7. VS 2012 显示Link的参数

    VC 通过Link将cl编译出来的.obj文件链接到一起.不过默认设置还是看不到究竟是怎么做的.需要如下设置: 右键点击工程,选择Properties菜单,然后选择左边的Linker->Gene ...

  8. 【转载】视频编码(H264概述)

    一视频编码介绍 1.1 视频压缩编码的目标 1)保证压缩比例 2)保证恢复的质量 3)易实现,低成本,可靠性 1.2 压缩的出发点(可行性) 1)时间相关性 在一组视频序列中,相邻相邻两帧只有极少的不 ...

  9. html5 video播放不全屏

    <video controls="controls" webkit-playsinline src="${page.videoUrl }" type=&q ...

  10. java获取当前系统毫秒,纳秒

    //获取当前系统毫秒 System.out.println(System.currentTimeMillis()); //获取当前系统纳秒 System.out.println(System.nano ...