《剑指offer》面试题11: 数值的整数次方
面试题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: 数值的整数次方的更多相关文章
- 剑指Offer:面试题11——数值的整数次方(java实现)
题目描述: 实现函数double Power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题 思路:本题的重点考察内容是 ...
- 剑指offer_面试题11 数值的整数次方_考察代码的完整性
测试通过代码: package t0825; public class Power { public static void main(String[] args){ System.out.print ...
- 剑指Offer - 九度1514 - 数值的整数次方
剑指Offer - 九度1514 - 数值的整数次方2013-11-30 00:49 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponen ...
- 剑指offer(12)数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 题目分析 这道题用传统的方法也可以做,只不过效率太低,这里我们用到快速幂的方法 ...
- 剑指offer十二之数值的整数次方
一.题目 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 二.思路 1.传统方法计算,时间复杂度O(n) 2.递归方式计算,时间复杂度O ...
- 【剑指Offer】12、数值的整数次方
题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解题思路: 本题看似比较简单,是一个简单的指数运算,但需要完 ...
- 剑指offer编程题Java实现——面试题11数值的整数次方
题目: 实现函数double power(double base,int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 解题思路:最一般的方法实现数值 ...
- 剑指offer-面试题11.数值的整数次方
题目:实现函数double Power(double base,int exponent),求base的 exponent次方.不得使用库函数,同时不需要考虑大数的问题. 这道题看似很简单: 然而需要 ...
- 剑指offer 面试题43. 1~n整数中1出现的次数
leetcode上也见过一样的题,当时不会做 看了一下解法是纯数学解法就没看,结果剑指offer上也出现了这道题,那还是认真看下吧 对于数字abcde,如果第一位是1,比如12345,即计算f(123 ...
- 剑指offer——面试题11:旋转数组的最小数字
#include"iostream" using namespace std; int GetMinNumber(int *data,int len) { ,right=len-, ...
随机推荐
- typeof(self) 的作用
block对于其变量都会形成strong reference,对于self也会形成strong reference ,而如果self本身对block也是 strong reference 的话,就会形 ...
- Redis集群部署
1.1.1redis简介 Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志 型. Key-Value数据库 1.1.2redis常见使用场景 1.会话缓存(S ...
- Python3学习(二)-递归函数、高级特性、切片
##import sys ##sys.setrecursionlimit(1000) ###关键字参数(**关键字参数名) ###与可变参数不同的是,关键字参数可以在调用函数时,传入带有参数名的参数, ...
- Android 取源码时 error: could not verify the tag 'v1.12.4'的解决
原帖地址http://forum.xda-developers.com/showthread.php?p=46100064也没说啥原因 repo init -u git://github.com/Cy ...
- 杭电ACM1003
原题: Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- c# 第一个实例 通哥
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- iOS 为移动中的UIView(UIButton )添加点击事件
高高兴兴迎接新的产品新需求,满心欢喜的开始工作,结果研究了一下午才发现,是自己想的太简单了,是我太单纯呀. 需求是这样的类似下雪的效果,随机产生一些小雪花,然后每个雪花可以点击到下个页面. 接到需求之 ...
- php session的操作
[设置session数据] <?php session_start(); //初始化 //session文件中可以保存 dobule,integer,bool,array,object $_SE ...
- C语言深度学习——第一天
首先声明一下,在我们写的程序中,会使用到一个头文件# include <head.h> 因为,在linux系统编程的时候,会用到很多头文件,为此,我用一个头文件全部包含在一起,头文件内容如 ...
- H5的FormData对象完成ajax上传文件multiFile
最近工作中需要完成,ajax上传图片,可是input file +ajax是无法完成的: 于是寻找了许久,发现了H5 的一个对象FormData 使用方法如下: HTML: <form id=& ...