本题来自《剑指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. MIME 类型

    关于读音 为了防止大家出去丢人,我先示范一下,MIME应该独坐[maim],听起来就好像“男人”的英语法人一样. 浏览器和MIME的关系 浏览器依靠MIME类型解释网页. 每当浏览器请求一个web页面 ...

  2. 【tmos】spring boot项目中处理Schedule定时任务

    我的代码 /** * Author:Mr.X * Date:2017/10/30 14:54 * Description: */ @Component @Configurable @EnableSch ...

  3. IDEA在同一窗口导入多个项目

    在同一窗口打开多个项目 1. 当前窗口: 2. 3.  选择import module即可.然后一直点击next导入OK即可. 同一窗口目录下创建多个项目 1.File→New→Module 2.Ja ...

  4. SSH命令行管理文件

    1.从服务器上下载文件 ssh root@13.111.122.133 2.从服务器上下载文件 scp username@servername:/path/filename /var/www/loca ...

  5. caffe调试

    这里说一下关于如何进行Caffe的调试: 参考:https://blog.csdn.net/tsyccnh/article/details/51679121 简要说一下步骤: (1)首先对libcaf ...

  6. makefile中.PHNOY的用法

    makefile中PHONY的重要性 伪目标是这样一个目标:它不代表一个真正的文件名,在执行make时可以指定这个目标来执行所在规则定义的命令,有时也可以将一个伪目标称为标签.伪目标通过   PHON ...

  7. linux 系统进程理解

    1.为了对进程从产生到消亡的整个过程进行跟踪和描述,就需要定义各种进程的各种状态并制定相应的状态转换策略,以此来控制进程的运行.      不同的操作系统对进程的状态解释不同,但是最基本的状态都是一样 ...

  8. JS导出excel设置下载的标题/与angular结合冲突

    2017.8更新 此功能与angular结合使用时,最后一行 document.getElementById("dlink").click(); 与angular的ng-click ...

  9. 利用表格分页显示数据的js组件datatable的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Select2日常操作集合

    1.获得多选值 var arraySelected = $('#carTypes').select2("data"); var carTypesDesc = ''; for (va ...