剑指Offer:面试题11——数值的整数次方(java实现)
题目描述:
实现函数
double Power(double base, int exponent)
,求base的exponent次方,不得使用库函数,同时不需要考虑大数问题
思路:本题的重点考察内容是代码的完整性,要综合考虑输入的合法性,边界值等等,同时也可以进行优化
实现一:
public double Power(double base, int exponent){
double result = 1.0;
for(int i = 0; i < exponent; i++){
result *= base;
}
return result;
}
这里没有考虑任何输入的非法性以及指数的负数情况。
实现二:
boolean g_InvalidInput = false;
public double Power(double base, int exponent){
g_InvalidInput = false;
if(equal(base, 0.0) && exponent < 0){
g_InvalidInput = true;
return 0.0;
}
int absExp = Math.abs(exponent);
double result = PowerWithPositiveExp(base, absExp);
if(exponent < 0){
result = 1.0/result;
}
return result;
}
public static double PowerWithPositiveExp(double base, int exp){
double result = 1.0;
for(int i = 0; i < exp; i++){
result *= base;
}
return result;
}
public static boolean equal(double d1, double d2){
if((d1 - d2 > -0.0000001) && ( d1 - d2 < 0.0000001)){
return true;
}else{
return false;
}
}
上述程序中对输入参数进行了合法性检查,同时设计了全局变量来标记输入的合法性表示。
但是上述代码还是不够高效。
实现3
public static double PowerWithPositiveExp(double base, int exp){
if(exp == 0){
return 1;
}
if(exp == 1){
return base;
}
double result = PowerWithPositiveExp(base, exp >> 1);
result *= result;
if(exp & 0x1 == 1){
resutl *= base;
}
return result;
}
这里利用了公式:
a^n = a^(n/2)* a^(n/2)*base
其中n为偶数时, base = 1; n为奇数时,base = a.
另外:使用位运算提高效率
除以2等价于 >> 1
模 2等价于 & 0x1
剑指Offer:面试题11——数值的整数次方(java实现)的更多相关文章
- 剑指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》面试题11 数值的整数次方 Java版
书中方法:这道题要注意底数为0的情况.double类型的相等判断.乘方的递归算法. public double power(double base, int exponent){ //指数为0 if( ...
- 剑指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面试题5 从头到尾打印链表(java)
注:(1)这里体现了java数据结构与C语言的不同之处 (2)栈的操作直接利用stack进行 package com.xsf.SordForOffer; import java.util.Stack; ...
随机推荐
- linux 编译安装nginx,配置自启动脚本
本文章来给各位同学介绍一篇关于linux 编译安装nginx,配置自启动脚本教程,希望有需要了解的朋友可一起来学习学习哦. 在公司的suse服务器装nginx,记录下安装过程: 参照这篇文章:Linu ...
- [Hibernate] - Criteria Select
使用Hibernate的Criteria做查询. 参考文档: http://docs.jboss.org/hibernate/orm/3.5/reference/zh-CN/html/querycri ...
- LintCode "k Sum" !!
Great great DP learning experience:http://www.cnblogs.com/yuzhangcmu/p/4279676.html Remember 2 steps ...
- C++库大全(转)
基础类1. Dinkumware C++ Library 参考站点:http://www.dinkumware.com P.J. Plauger编写的高品质的标准库.P.J. Plauger博士是Dr ...
- SDS查看部署在集成TOMCAT服务器中的项目目录结构
- UVa 297 Quadtrees(树的递归)
Quadtrees 四分树就是一颗一个结点只有4个儿子或者没有儿子的树 [题目链接]UVa 297 Quadtrees [题目类型]树的递归 &题意: 一个图片,像素是32*32,给你两个先序 ...
- POJ 3368 Frequent values RMQ 训练指南 好题
#include<cstdio> #include<cstring> ; const int inf=0x3f3f3f3f; inline int max(int x,int ...
- C#实现局域网文件传输
网络通信一般都是通过Socket进行的,称为进程通信机制,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄. 先学习一下socket基本原理: socket原理: ...
- 并发容器之ConcurrentSkipListSet
概要 本章对Java.util.concurrent包中的ConcurrentSkipListSet类进行详细的介绍.内容包括:ConcurrentSkipListSet介绍ConcurrentSki ...
- struts2请求过程源码分析
Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork的核心,所以,Struts2并不是一个不成熟的产品,相 ...