本题来自《剑指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. FTP之二

    username=admin password=123 ip=192.168.14.117 port=21 参考:http://blog.csdn.net/yelove1990/article/det ...

  2. vue购物车实战项01

    1. 关于挂载点 2.图片路径 这样的引入方式 是直接文件夹下myVue 3.import 不能用绝对路径 只能用相对路径  图片可以绝对路径 4.引入组件步骤 1.引入组件  @的含义在配置里面可以 ...

  3. Javascript - ExtJs - 事件

    事件(ExtJs Event) Ext.Util.observable类  Ext.Util.observable是一个接口,为Ext组件的事件提供了支持,组件的事件不同于传统事件,所以需要有这么一套 ...

  4. 基于ip的虚拟主机配置——在一台服务器上绑定多个 IP 地址

    进入/etc/sysconfig/network-scripts,修改ifcfg-ens33文件 输入 ip addr 查看ip 引用:https://blog.csdn.net/u013887008 ...

  5. linux 服务器下的基本操作

    1.SSH 上传: scp /path/file(这部分为本地的路径) user(远端目标用户名)@host(远端目标IP):/pathorfile(文件存储路径) 下载: scp user(远端用户 ...

  6. 【leetcode】657. Robot Return to Origin

    Algorithm [leetcode]657. Robot Return to Origin https://leetcode.com/problems/robot-return-to-origin ...

  7. web前端之性能

    1.避免布局抖动 function resizeAllParagraphsToMatchBlockWidth() { // Puts the browser into a read-write-rea ...

  8. linux shell 之尝试编写 企业级 启动脚本

    企业Shell面试题10:开发企业级MySQL启动脚本 说明: MySQL启动命令为: 1 /bin/sh mysqld_safe --pid-file=$mysqld_pid_file_path 2 ...

  9. mutt+msmtp实现在shell环境中发送电子邮件

    作者:邓聪聪 为了自动化接收服务端的文件备份信息,利用mutt+msmtp在shell环境中发送电子邮件,轻松高效的完成运维工作. 下载msmtp wget http://downloads.sour ...

  10. CF449C:Jzzhu and Apples

    题意简述 给出正整数n,你要把1-n之间的正整数分成尽可能多组,使得每一组两个数的最大公约数大于1;输出能分成最多组的个数,并按任意顺序输出每组的两个数. 很妙的一道题. 首先我们考虑去处理每个质数的 ...