本题来自《剑指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. 【Thymeleaf】Thymeleaf模板对没有结束符的HTML5标签解析出错的解决办法

    解决方案 spring: thymeleaf: mode: LEGACYHTML5 <dependency> <groupId>net.sourceforge.nekohtml ...

  2. 推荐前端框架 & 模板

    BootStrap Semantic UI Pure Amazeui(前后端都有,很丰富) amazeui http://tpl.amazeui.org AdminLTE AdminLTE https ...

  3. Failed to read artifact ......明明之前可以的

    Type One or more constraints have not been satisfied. mybaits Failed to read artifact ....jar 右键proj ...

  4. mysql 案例 ~ 主从复制延迟之并行复制

    一 概念说明   1 模型 并行复制是典型的生产者.消费者模式,Coordinator作为生产者,worker线程作为消费者.   2 Waiting for preceding transactio ...

  5. Nginx系列0:Nginx学习历程

    Nginx学习历程 一.初识Nginx 1.Nginx适用于哪些场景 (1)静态资源服务 通过本地文件系统提供服务 (2)反向代理服务 Nginx的强大性能 缓存 负载均衡 (3)API服务 Open ...

  6. 二叉查找树(Binary Search Tree)

    二叉树的一个重要的应用是他们在查找中的使用. 以下是二叉查找树的查找代码 #include <stdio.h> int main() { typedef struct Node{ int ...

  7. 对mysql乐观锁、悲观锁、共享锁、排它锁、行锁、表锁概念的理解

    乐观锁 乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了. 实现: 通常实现是 ...

  8. dubbo源码分析12——服务暴露3_doExportUrls()方法分析

    本文紧接上文,doExportUrls()方法位于ServiceConfig类中,代码入口如下: private void doExportUrls() { List<URL> regis ...

  9. 网页块元素定位建议使用的xpath方式

    取上图的新手上路文字 使用xpath "//div[@class='pbm mbm bbda cl']//li[contains(string(),'用户组')]/span/a/text() ...

  10. Liunx之始

    作者:邓聪聪 本章是为了工作之需要,所做的一个学习心得,也为自己留下相关印记以便日后留用. 1:安装服务yum install ppp -yyum install pptpd -y由于yum源没有pp ...