简单算法题之数值的正数次方

本文参考《剑指offer》,探讨实现函数double power(double base, int exponent)求base的exponent次方的解法。介绍了直接for循环相乘的简单解法,但该解法对指数小于等于0的情况无法处理。还给出了分析多种情况的解法,以及对乘方部分进行优化的解法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文参考书籍 《剑指offer》 作者何海涛

01 题目

实现函数 double power(double base, int exponent),求base的exponent次方,不得使用库函数,同时不需要考虑大数问题。

02 解法一

最简单直接的解法, 直接for循环相乘

程序员算法面试题之数值的正数次方

 

这种情况当输入的指数为<=0就没有办法处理,所以不可取

03 解法二

首先分析所有的可能情况

1.当exponent为0时,(1).base>0或者base<0时,结果为1。

(2)base为0时,可以约定为1,也可以约定为0,0的0次方无意义,具体可以和面试官讨论

2.当exponent为负数时 (1) base > 0 and base < 0,对exponent取绝对值得absexponent,取absexponent次方,最后取倒数。

(2) base = 0 ,0的倒数无意义,抛异常,或者返回其他规定的值

3.当exponent为正数,正常循环求值

代码如下:

base的乘方

程序员算法面试题之数值的正数次方

 

判断两个double是否相等

程序员算法面试题之数值的正数次方

 

 计算机表示浮点数(float或double类型)都有一个精度限制,对于超出了精度限制的浮
点数, 计算机会把它们的精度之外的小数部分截断。因此,本来不相等的两个浮点数在
计算机中可能就变成相等的了。 float a=10.222222225,b=10.222222229,我们这里
忽略两个数之间的差特别小的差异,就当做是相等的

求base的exponent次方

程序员算法面试题之数值的正数次方

 

03 解法3 乘方部分再次优化

base的exponent方有重复计算的部分,

(1)如 a^32 次方

a^32 = a ^ 16 *a^16 只需要计算一次 a^16次方就可以

再类推,a ^ 16= a ^ 8 *a^8 ,只计算一次 8 a^8次方就可以了

a ^ 8 = a ^ 4 *a^4

a ^ 4=a^2*a^2

a^2=a*a

(2) a^33 = a * a^16*a^16

可以总结为公式

程序员算法面试题之数值的正数次方

 

代码

程序员算法面试题之数值的正数次方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值