本题来自《剑指offer》 数值的整数次方

题目:

  给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

思路:

  代码从三个方面处理错误的代码,返回值,全局代码和异常。

  我们考虑exponent是{负数,0,正数}和base有可能的取值{自然数,0}

  首先考虑边界:如果base是0,则取值没有意义。exponent是0,则返回值为1。

  如果exponent是负数,则返回其倒数即可。

  如果exponent是正数,则直接返回。  

  处理函数可以采用循环的方式,为O(n),如果采用递归的方式为log(n)。

C++ Code:

class Solution {
public:
double Power(double base, int exponent) {
if (equal(base,0.0) && exponent < ){
return ;
}
unsigned int absexponent = (unsigned int)(exponent);
if (exponent < ){
absexponent = (unsigned int)(-exponent);
}
double result = PowerDeal(base,absexponent);
if (exponent < ){
result = 1.0 / result;
}
return result;
}
bool equal(double num1,double num2){
if ((num1 - num2 > -0.0000001) && (num1-num2<0.0000001)){
return true;
}else{
return false;
}
}
double PowerDeal(double base,unsigned int exponent){
double result = 1.0;
for (int i = ;i<=exponent;i++){
result *= base;
}
return result;
}
};

Python Code:

# -*- coding:utf-8 -*-
class Solution:
def Power(self, base, exponent):
# write code here
if base == 0 and exponent <= 0: #考虑边界,当base为0并且指数小于0,便没有意义
return 0
absexponent = abs(exponent) #求绝对值
result = self.PowerDeal(base,absexponent) #只求正数的指数
if exponent == 0: #如果指数为0,则结果为1
return 1
elif exponent < 0: #如果指数为负数,则结果是正数的倒数
result = 1 / result
return result
def PowerDeal(self,base,exponent): #采用循环的思路是O(n)
result = 1.0
for i in range(exponent):
result *= base
return result
def IterPowerDeal(self,base,exponent): #采用递归的思路,将是logn
if base == 0:
return 1
if base == 1:
return base
result = self.IterPowerDeal(base,exponent//2)
result *= result
if exponent & 0x1 == 1:
result *= base
return result

总结:

  要考虑边界条件,异常处理,正常的逻辑功能。

《剑指offer》 数值的整数次方的更多相关文章

  1. 剑指Offer 数值的整数次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.   思路: 要考虑边界,0,负数   AC代码: class Solution ...

  2. 剑指Offer——数值的整数次方

    题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 分析: 快速幂,简单解释下, 当e的二进制为1001011, b^e=b^( ...

  3. 用js刷剑指offer(数值的整数次方)

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 牛客网链接 思路 快速幂算法,举个例 ...

  4. 剑指offer--6.数值的整数次方

    时间限制:1秒 空间限制:32768K 热度指数:362909 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. class S ...

  5. (原) 剑指offer--之数值的整数次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.   初次看题觉得这题好简单,直接用库函数power()不就行了,仔细想了想,万 ...

  6. 剑指Offer-12.数值的整数次方(C++/Java)

    题目: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.   保证base和exponent不同时为0 分析: 注意base为0和expo ...

  7. 10-剑指offer: 数值的整数次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 代码 class Solution { public: double Powe ...

  8. 剑指Offer09 数值的整数次方

    /************************************************************************* > File Name: 09_Power. ...

  9. 【剑指 Offer II 001. 整数除法】同leedcode 29.两数相除

    剑指 Offer II 001. 整数除法 解题思路 在计算的时候将负数转化为正数,对于32位整数而言,最小的正数是-2^31, 将其转化为正数是2^31,导致溢出.因此将正数转化为负数不会导致溢出. ...

  10. 剑指offer之关于整数的处理

    首先是整数次方的处理 在这处理的时候有几个细节主义处理 1.当指数是负数的时候 2.当指数式0的时候 3.当不满足条件的时候要抛出异常 再一个就是常用的将一个树化为二进制的形式,或者是求整数的幂或者矩 ...

随机推荐

  1. JDK开发环境搭建及环境变量配置

    Java配置----JDK开发环境搭建及环境变量配置 1. 下载安装安装JDK开发环境 http://www.oracle.com/technetwork/java/javase/downloads/ ...

  2. python 中的"*"与"**"

    1.Python中 *和**很常见的运算符的用途及其多种使用方式. 本文所述的*和**,指的是*和**前缀运算符,而不是中缀运算符. 所以指的不是乘法和乘幂: 使用*和**将参数传递给函数 使用*和* ...

  3. jQuery(二)button事件改变标签值

    button事件改变标签值 例子一: <html> <head> <script type="text/javascript" src="/ ...

  4. 强网杯2018 Web签到

    Web签到 比赛链接:http://39.107.33.96:10000 比赛的时候大佬对这题如切菜一般,小白我只能空流泪,通过赛后看别人的wp,我知道了还有这种操作. 这个赛题分为3层 第一层 Th ...

  5. RabbitMQ安装(一)

    RabbitMQ官网 http://www.rabbitmq.com 下载地址 http://www.rabbitmq.com/download.html 一 Windows下安装RabbitMq 1 ...

  6. SQL Server - 索引详细教程 (聚集索引,非聚集索引)

    转载自:https://www.cnblogs.com/hyd1213126/p/5828937.html 作者:爱不绝迹 (一)必读:深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录. ...

  7. 【转】python操作excel表格(xlrd/xlwt)

    [转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...

  8. Yarn vs npm: 你需要知道的一切

    Yarn 是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具.就像我们可以从官方文档了解那样,它的目的是解决这些团队使用 npm ...

  9. Net开发的部分知名网站案例

    .Net开发的部分知名网站案例:http://www.godaddy.com 全球最大域名注册商http://www.ips.com 环迅支付,国内最早的在线支付平台http://www.icbc.c ...

  10. 设计模式C++学习笔记之十二(Command命令模式)

      命令模式,将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作.应该是一个比较简单的模式了. 12.1.解释 main(),客户 CIn ...