网站五合一建设,地产网站模板,asp.net网站不能上传图片,网页源代码是什么语言【剑指offer】JZ16#xff1a;数值的整数次方题目描述解题思路题目描述
描述#xff1a;实现函数 double Power(double base, int exponent)#xff0c;求base的exponent次方。
注意#xff1a; 1.保证base和exponent不同时为0。 2.不得使用库函数#xff0c;同时不需要…
【剑指offer】JZ16数值的整数次方题目描述解题思路题目描述
描述实现函数 double Power(double base, int exponent)求base的exponent次方。
注意 1.保证base和exponent不同时为0。 2.不得使用库函数同时不需要考虑大数问题。 3.有特殊判题不用考虑小数点后面0的位数。
数据范围 ∣base∣≤100 ∣exponent∣≤100 ,保证最终结果一定满足 ∣val∣≤104。
进阶空间复杂度 O(1) 时间复杂度 O(n) 。
输入2.00000,3
返回值8.00000输入2.10000,3
返回值9.26100输入2.00000,-2
返回值0.25000
说明2的-2次方等于1/40.25解题思路
数值的整数次方最直观的想法是求a的b次方使用for循环直接循环b次。更快求数值的整数次方的方法是快速幂其基本思想是如果b是偶数那么ab就分为ab/2×ab/2如果b是奇数那么ab就分为ab-1×a。举一个通俗易懂的例子比如求55则5554×55452×525251×51。如果使用计算机来实现的话可以使用二进制来判断当指数大于0时进入循环首先判断指数的最后一位是否为1如果是则将其乘入结果同时每次循环中还需要对底数进行自乘并将指数右移一位为下次循环做准备。
double Power(double base, int exponent)
{double result1;bool flagexponent0?true:false;exponentabs(exponent);while(exponent0){if(exponent1) //二进制最后一位是1result*base;base*base;exponent1;}return flagtrue?result:1.0/result;;
}