一、前言
本系列文章为《剑指Offer》刷题笔记。
刷题平台:牛客网
书籍下载:共享资源
二、题目
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
1、思路
当指数为负数的时候,可以先对指数求绝对值,然后算出次方的结果之后再取倒数。如果底数为0,则直接返回0。此时的次方在数学上是没有意义的。
除此之外,我们要注意:由于计算机表示小数(包括float和double型小数)都有误差,我们不能直接用等号(==)判断两个小数是否相等。如果两个小数的差的绝对值很小,比如小于0.0000001,就可以认为它们相等。
在计算次方的时候,除了简单的遍历,我们可以使用如下公式进行计算,来减少计算量:
2、代码
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | class Solution { public: double Power(double base, int exponent) { if(equal(base, 0.0)){ return 0.0; } unsigned int absExponent = 0; if(exponent > 0){ absExponent = (unsigned int)(exponent); } else{ absExponent = (unsigned int)(-exponent); } double result = PowerWithUnsignedExponent(base, absExponent); if(exponent < 0){ result = 1.0 / result; } return result; } private: bool equal(double num1, double num2){ if(num1 - num2 > -0.0000001 && (num1 - num2) < 0.0000001){ return true; } else{ return false; } } double PowerWithUnsignedExponent(double base, unsigned int exponent){ if(exponent == 0){ return 1; } if(exponent == 1){ return base; } double result = PowerWithUnsignedExponent(base, exponent >> 1); result *= result; if(exponent & 0x1 == 1){ result *= base; } return result; } }; |
Python2.7:
python中等于没有误差,因此可以写出如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | # -*- coding:utf-8 -*- class Solution: def Power(self, base, exponent): # write code here flag = 0 result = 1 if base == 0: return False if exponent < 0: flag = 1 for i in range(abs(exponent)): result *= base if flag == 1: result = 1 / result return result |

微信公众号
分享技术,乐享生活:微信公众号搜索「JackCui-AI」关注一个在互联网摸爬滚打的潜行者。
2019年10月23日 下午9:02 沙发
请问把int类型的exponent转换为unsigned int有什么好处???