面试题11: 数值的整数次方

剑指offer面试题11,题目如下

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

看起来这道题是一道很简单的题目,不需要什么算法思想,《剑指offer》书中循序渐进讲解了3种方

法,指出可能会出现的问题

方法一###

直接使用for循环解决问题

public static double power_method_1(double base,int exponent)
{
double result = 1.0;
for(int i = 1;i <= exponent; i++)
result *= base;
return result;
}

如果指数出现负数情况,算法将不能输出正确答案,需要对指数的正负分别讨论

方法二###

当指数出现负数的情况,可以先对指数求绝对值,然后算出次方的结果再求倒数,既然是求倒数就需要考虑到底数(base)是零的情况。

public static double power_method_2(double base,int exponent)
{
if(equal(base, 0.0) && exponent < 0) //处理指数为负数,底数为0
{
return 0.0;
}
double result = 1.0;
int absExponent = exponent;
if(exponent < 0)
absExponent = -exponent;
result = power_method_1(base,absExponent);
if (exponent < 0)
result = 1.0 / result;
return result;
}
public static boolean equal(double num1,double num2)
{
if(Math.abs(num1 - num2) < .0000001)
return true;
return false;
}

注意:在判断底数是否为0的时候,并不是使用base == 0,因为计算机表示小数(float和double型小数)的时候都存在误差,不能直接使用==,如果两个数的差的绝对值很小就能判断为相等。

原书中还提到在提到了设置全局变量来处理异常。

方法三###

如果输入的指数exponent为32,我们在计算结果的时候for循环就需要做31次乘法,可以这样(base2)16;32次方先求平方,再平方的基础上求4次方,8次方,16次方,最后32次方总共5次乘法。

public static double power_method_3(double base,int exponent)
{
if(exponent == 0)
return 1;
if(exponent == 1)
return base;
double result = power_method_3(base, exponent >> 1);
result *= result;
if((exponent & 0x1) == 1)//判断是否为奇数
result *= base;
return result;
}

使用位运算代替%2操作来判断奇偶数,这种方法利用值得借鉴的递归思想,但这种方法和方法一都为考虑到指数负数情况,需要结合方法二来完善。

总结###

看似简单的一道题,需要注意的细节有

  • 代码对测试用例的覆盖
  • 算法性能的优化

《剑指offer》面试题11: 数值的整数次方的更多相关文章

  1. 剑指Offer:面试题11——数值的整数次方(java实现)

    题目描述: 实现函数double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题 思路:本题的重点考察内容是 ...

  2. 剑指offer_面试题11 数值的整数次方_考察代码的完整性

    测试通过代码: package t0825; public class Power { public static void main(String[] args){ System.out.print ...

  3. 剑指Offer - 九度1514 - 数值的整数次方

    剑指Offer - 九度1514 - 数值的整数次方2013-11-30 00:49 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponen ...

  4. 剑指offer(12)数值的整数次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 题目分析 这道题用传统的方法也可以做,只不过效率太低,这里我们用到快速幂的方法 ...

  5. 剑指offer十二之数值的整数次方

    一.题目 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 二.思路 1.传统方法计算,时间复杂度O(n) 2.递归方式计算,时间复杂度O ...

  6. 【剑指Offer】12、数值的整数次方

      题目描述:   给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.   解题思路:   本题看似比较简单,是一个简单的指数运算,但需要完 ...

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

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

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

    题目:实现函数double Power(double base,int exponent),求base的 exponent次方.不得使用库函数,同时不需要考虑大数的问题. 这道题看似很简单: 然而需要 ...

  9. 剑指offer 面试题43. 1~n整数中1出现的次数

    leetcode上也见过一样的题,当时不会做 看了一下解法是纯数学解法就没看,结果剑指offer上也出现了这道题,那还是认真看下吧 对于数字abcde,如果第一位是1,比如12345,即计算f(123 ...

  10. 剑指offer——面试题11:旋转数组的最小数字

    #include"iostream" using namespace std; int GetMinNumber(int *data,int len) { ,right=len-, ...

随机推荐

  1. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(六)

    前言 在接下来的篇幅里将对系统的模块功能进行编写.主要以代码实现为主.这一篇我们需要完成系统模块“角色管理”的相关功能.完成后可以对系统框架结构有进一步了解. Abstract层 之前说过,Abstr ...

  2. 利用flash精确定位asp.net的图像热点区域

    Asp.net的热点区域控件非常有用,但是对于热点区域如何精确定位,设定矩形,圆和多边形要素点的位置,用flash能够精确定位,在flash中制作热点区域的部分,可以是矩形,图形或者文字,然后对于这部 ...

  3. sfliter__except_handler4

    sfliter源码在vs08中编译 出现 错误error LNK2019: unresolved external symbol __except_handler4 referenced in fun ...

  4. PHPExcel读取Excel文件的实现代码

    <?php require_once 'PHPExcel.php'; /**对excel里的日期进行格式转化*/ function GetData($val){ $jd = GregorianT ...

  5. Javascript中String()与new String()的差异

    这里主要关注的是值类型和引用类型. 我们知道在javascript中的变量在内存中的存储有两种形式,值类型存储和引用类型存储. 通常可以进行值存储的包括  字符串类型,布尔值类型,数字类型,他们都包含 ...

  6. 在centos环境安装mysql

    在Linux上安装mysql数据库,我们可以去其官网上下载mysql数据库的rpm包,http://dev.mysql.com/downloads/mysql/5.6.html#downloads,大 ...

  7. Qt中2D绘图问题总结(一)----------基本的绘制与填充

    刚刚开始学习Qt不久,才开始渐渐地熟悉基础内容,学习过程中的一些知识的总结和感悟希望通过博客记录下来,与大家分享学习的同时,也是对自己坚持下去的鞭策,废话不多说了,开始第一次的小总结吧. Qt提供了强 ...

  8. Android WebView useragent

    今天介绍一下Android WebView UserAgent, User-Agent(简称UA)是HTTP请求头部用来标识客户端信息的字符串, 包括操作系统, 浏览器等信息.为了建立手机客户端的信息 ...

  9. C#文件流读写文件的简单winform实现

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. hive问题整理(待续)

    本人对hadoop生态系统的环境搭建.配置相关再熟悉不过了,周末刚测试过oozie相关的 今早使用hive,报错: Exception in thread "main" java. ...