leecode 解题总结:50. Pow(x, n)

来源:互联网 发布:mac 下数据库建模工具 编辑:程序博客网 时间:2024/06/05 04:14
#include <iostream>#include <stdio.h>using namespace std;/*问题:Implement pow(x, n).分析:这是剑指offer的一道题目。用递归来做,注意n的奇偶性我们知道如果n>0,那么x^(-n) = 1 / (x^n),必须确保x^n不为0,则必须确保x!=0输入:2(x) 10(n)0 110 -10 01 00 -110 -21.00000 -2147483648输出:102400.11100.011.00000关键:1 long long nTemp = llabs(n);//取正整数,防止溢出,这里必须用llabs*/class Solution {public:double compute(double x ,long long n){//递归基,n=0,返回1if(0 == n){return 1;}//如果是,n=1,返回x本身else if(1 == n){return x;}double result;long long radix;//如果是偶数,if( (n&1) == 0){radix = n/2;result = compute(x , radix);return (result * result);}//如果是奇数else {radix = (n-1)/2;result = compute(x , radix);return (x * result * result);}}    double myPow(double x, int n) {if(0 == n){return 1;}//这种情况实际不允许存在,直接返回0if( n < 0 && x == 0){return 0;}        int symbol = n >= 0 ? 1 : -1;long long nTemp = llabs(n);//取正整数,防止溢出,这里必须用llabsdouble result = compute(x , nTemp);if(symbol == -1 )//&& fabs(result) >= 1e-6){result = 1 / result;}return result;    }};void process(){double x;int n;double result;Solution solution;while(cin >> x >> n){result = solution.myPow(x , n);cout << result << endl;}}int main(int argc , char* argv[]){process();getchar();return 0;}

0 0
原创粉丝点击