12剑指offer--数值的整数次方
Posted qqky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12剑指offer--数值的整数次方相关的知识,希望对你有一定的参考价值。
题目描述
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解题思路:首先要注意特殊情况的处理 base为0情况 exponent为0 为1情况 exponent为负数情况
1 #include <iostream> 2 using namespace std; 3 class Solution { 4 public: 5 //要注意的几点 6 //1、base == 0 7 //2、exponent == 0;==1 8 //3、exponent 为负数 9 double Power(double base, int exponent) { 10 if(equal(base,0.0)) 11 { 12 return 0.0; 13 } 14 unsigned int abExponent = (unsigned int)(exponent);//一定要注意此处给其赋值,否则如果exponent不小于0时,该值随机,会出现错误 15 if(exponent < 0) 16 abExponent = (unsigned int)(-exponent); 17 double result = 1.0; 18 for(int i=1;i<=abExponent;i++) 19 { 20 result *= base; 21 } 22 if(exponent<0) 23 return 1.0/result; 24 else 25 return result; 26 27 28 } 29 bool equal(double num1,double num2) 30 { 31 if((num1-num2)>-0.0000001 && (num1-num2)<0.0000001) 32 { 33 return true; 34 } 35 else 36 return false; 37 } 38 //方法二:a^n = a^(n/2)*a^(n/2) n为偶数 39 // a^n = a^(n/2)*a^(n/2)*a n为奇数 40 double Power2(double base, int exponent) { 41 if(equal(base,0.0)) 42 { 43 return 0.0; 44 } 45 if(exponent == 0) 46 return 1.0; 47 else if(exponent == 1) 48 return base; 49 unsigned int abExponent = (unsigned int)(exponent); 50 if(exponent < 0) 51 abExponent = (unsigned int)(-exponent); 52 double result = Power2(base,abExponent>>1);//右移1相当于除以2 53 result *= result;//a^(n/2)*a^(n/2); 54 if(abExponent & 0x1 == 1)//奇数 55 { 56 result *= base; 57 } 58 if(exponent < 0) 59 return 1.0/result; 60 else 61 return result; 62 } 63 }; 64 int main() 65 { 66 double n ; 67 int x; 68 while(cin>>n>>x) 69 { 70 Solution s; 71 cout<<"调用方法一:"<<n<<"的"<<x<<"次方为:"<<s.Power(n,x)<<endl; 72 cout<<"调用方法二:"<<n<<"的"<<x<<"次方为:"<<s.Power2(n,x)<<endl; 73 } 74 return 0; 75 }
程序运行结果:
以上是关于12剑指offer--数值的整数次方的主要内容,如果未能解决你的问题,请参考以下文章