算法题20 数值的整数次方
题目
求一个函数的整数次幂,不考虑溢出以及大数问题
分析
本题思路很简单,采用分治策略,求整数的一半次幂,进而递归求解。这个题需要注意底数和指数的各种情况。
代码
1 double powercore(double base,int exponent) 2 { 3 if (exponent==1)//终止递归的条件:二分至指数为1 4 { 5 return base; 6 } 7 8 double result=powercore(base,exponent>>2); 9 result*=result; 10 if (exponent%2==1)//指数为奇数的话需要再乘以一次底数 11 { 12 result*=base; 13 } 14 15 return result; 16 17 } 18 19 double mpower(double base,int exponent) 20 { 21 if (base==0&&exponent==0) 22 { 23 throw std::exception("Invalid input."); 24 } 25 26 if (exponent==0||base==1)//指数为0或者底数为1 27 { 28 return 1; 29 } 30 31 double exp=abs(exponent); 32 double result=powercore(base,exp); 33 34 if (exponent<0)//指数小于0,需求倒数 35 { 36 result=1/result; 37 } 38 39 return result; 40 }