《剑指offer》 数值的整数次方
本题来自《剑指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》 数值的整数次方的更多相关文章
- 剑指Offer 数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路: 要考虑边界,0,负数 AC代码: class Solution ...
- 剑指Offer——数值的整数次方
题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 分析: 快速幂,简单解释下, 当e的二进制为1001011, b^e=b^( ...
- 用js刷剑指offer(数值的整数次方)
题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 牛客网链接 思路 快速幂算法,举个例 ...
- 剑指offer--6.数值的整数次方
时间限制:1秒 空间限制:32768K 热度指数:362909 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. class S ...
- (原) 剑指offer--之数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 初次看题觉得这题好简单,直接用库函数power()不就行了,仔细想了想,万 ...
- 剑指Offer-12.数值的整数次方(C++/Java)
题目: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 保证base和exponent不同时为0 分析: 注意base为0和expo ...
- 10-剑指offer: 数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 代码 class Solution { public: double Powe ...
- 剑指Offer09 数值的整数次方
/************************************************************************* > File Name: 09_Power. ...
- 【剑指 Offer II 001. 整数除法】同leedcode 29.两数相除
剑指 Offer II 001. 整数除法 解题思路 在计算的时候将负数转化为正数,对于32位整数而言,最小的正数是-2^31, 将其转化为正数是2^31,导致溢出.因此将正数转化为负数不会导致溢出. ...
- 剑指offer之关于整数的处理
首先是整数次方的处理 在这处理的时候有几个细节主义处理 1.当指数是负数的时候 2.当指数式0的时候 3.当不满足条件的时候要抛出异常 再一个就是常用的将一个树化为二进制的形式,或者是求整数的幂或者矩 ...
随机推荐
- python中的join.set ,copy以及删除注意事项:
1 ,join : 将对象以字符串的方式拼接成一个整体 for E : li = ["李白", "是", "诗仙"] s = & ...
- chrome性能分析
Chrome开发者工具之JavaScript内存分析 前端性能优化 —— 前端性能分析 Chrome DevTools - 性能监控
- python - 条件语句/循环语句/迭代器
条件测试:if 条件表达式python 的比较操作 所有的python对象都支持比较操作 可用于测试相等性.相对大小等 如果是复合对象,pyt ...
- 1259 整数划分 V2
设dp[n]为整数n的分割函数,由五边形定理得到: dp[n] = dp[n-1] + dp[n-2] - dp[n-5] - dp[n-7]…… 我们将其分为两部分计算 第一部分为 :( dp[n- ...
- SpringBoot文件上传大小设置(yml中配置)
#文件大小 MB必须大写 # maxFileSize 是单个文件大小 # maxRequestSize是设置总上传的数据大小 spring: servlet: multipart: enabled: ...
- openstack Q版部署-----虚拟机创建(8)
一 .创建网络环境 环境变量生效一下 创建一个网络: openstack network create --share --external \ --provider-physical-network ...
- 安装mysql8.0.12以及修改密码和Navicat的连接
mysql8.0+与安装其他版本不同一.安装mysql8.0.121.到官网https://www.mysql.com/ 下载mysql-8.0.12-winx64.zip(不要.mis),直接解压 ...
- Python open() 函数
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=T) 模式 描述 r 以只读方 ...
- html5离线记事本
离线记事本 这是一个笔记应用,不需要联网,也不需要数据库,可以直接把数据储存在本地.方便易用! ^_^ <!DOCTYPE html> <html> <head> ...
- Tensorflow的Queue读取数据机制
参考链接:http://www.sohu.com/a/148245200_115128