剑指offer面试题11 数值的整数次方
来源:互联网 发布:godaddy域名转移 编辑:程序博客网 时间:2024/06/07 16:28
一、题目
实现函数double Power(double base,int exponent ),求base的exponent次方。要求:不得使用库函数,同时不需要考虑大数问题。
二、思考分析
题目不需要考虑大数问题,看似很简单,但是需要考虑全面,并且提高效率,才是面试官想要看到的结果。
需要考虑的情况 :
* 指数(exponent)等于零时;
* 指数(exponent)为正数时;
* 指数(exponent)为负数时;
* 底数(base)为零,指数也为零时;
package com.offer.jianzhi;public class DoublePower { // 方法一:考虑全面 public double power(double base, int exponent) { double result = 0.0; if (exponent == 0) { return 1.0; } if (base == 0.0) { return result; } if (exponent < 0) { result = 1.0 / cal(base, -exponent); } else { result = cal(base, exponent); } return result; } public double cal(double base, int exponent) { double d = 1.0; for (int i = 0; i < exponent; i++) { d = d * base; } return d; } // 方法二:提高效率 public double power2(double base, int exponent) { double result = 0.0; if (exponent == 0) { return 1.0; } if (base == 0.0) { return result; } if (exponent < 0) { result = 1.0 / powerWithUnsignedExponent(base, -exponent); } else { result = powerWithUnsignedExponent(base, exponent); } return result; } public double powerWithUnsignedExponent(double base, int exponent) { if (exponent == 0) { return 1.0; } if (exponent == 1) { return base; } double d = powerWithUnsignedExponent(base, exponent >> 1);// exponent>>1表示除以2 d *= d; if ((exponent & 0x1) == 1) {// 判断exponent是否为奇数 d *= base; } return d; } public static void main(String[] args) { double a = Math.pow(3, 32);// 使用库函数 System.out.println(a); DoublePower dp = new DoublePower();// 方法一 double d = dp.power(3, 32); System.out.println(d); double d1 = dp.power2(3, 32);// 方法二 System.out.println(d1); }}
阅读全文
0 0
- [剑指offer][面试题11]数值的整数次方
- 【剑指offer】面试题11:数值的整数次方
- 剑指offer 面试题11 数值的整数次方
- 剑指Offer:面试题11 数值的整数次方
- 《剑指Offer》面试题11:数值的整数次方
- 【剑指Offer学习】【面试题11 :数值的整数次方】
- 剑指offer-面试题11:数值的整数次方
- 剑指offer之面试题11:数值的整数次方
- 剑指offer----面试题11:数值的整数次方
- 剑指offer之面试题11数值的整数次方
- 剑指Offer--面试题11 数值的整数次方
- 剑指Offer----面试题11:数值的整数次方
- 剑指offer-面试题11:数值的整数次方
- 剑指offer面试题11:数值的整数次方
- 剑指offer--面试题11: 数值的整数次方
- 剑指Offer之面试题11:数值的整数次方
- 剑指offer-面试题11-数值的整数次方
- 剑指Offer系列-面试题11:数值的整数次方
- c语言编译过程详解
- 深入mysql "ON DUPLICATE KEY UPDATE" 语法的分析
- Socket 之TCP UDP
- ubuntu 设置wifi共享
- Objective-C 语法四(类别)
- 剑指offer面试题11 数值的整数次方
- 定位
- 在windows服务器上正确部署免安装版tomcat的姿势
- js判断Android、iOS或浏览器
- 网口扫盲一:网卡初步认识
- awk数组介绍
- 过滤器和拦截器的区别
- 线性模型
- Tomcat历史版本下载