[LintCode] Pow(x, n) 求x的n次方

Implement pow(x, n).

Notice

You don‘t need to care about the precision of your answer, it‘s acceptable if the expected answer and your answer ‘s difference is smaller than 1e-3.

Have you met this question in a real interview?

Yes

Example

Pow(2.1, 3) = 9.261
Pow(0, 1) = 0
Pow(1, 0) = 1

LeetCode上的原题,请参见我之前的博客Pow(x, n)

解法一:

class Solution {
public:
    /**
     * @param x the base number
     * @param n the power number
     * @return the result
     */
    double myPow(double x, int n) {
        if (n == 0) return 1;
        double half = myPow(x, n / 2);
        if (n % 2 == 0) return half * half;
        else if (n > 0) return half * half * x;
        else return half * half / x;
    }
};

解法二:

class Solution {
public:
    /**
     * @param x the base number
     * @param n the power number
     * @return the result
     */
    double myPow(double x, int n) {
        if (n == 0) return 0;
        if (n == 1) return x;
        if (n == -1) return 1 / x;
        return myPow(x, n / 2) * myPow(x, n - n / 2);
    }
};
时间: 2024-11-24 17:04:37

[LintCode] Pow(x, n) 求x的n次方的相关文章

[LeetCode] Pow(x, n) 求x的n次方

Implement pow(x, n). 这道题让我们求x的n次方,如果我们只是简单的用个for循环让x乘以自己n次的话,未免也把LeetCode上的想的太简单了,一句话形容图样图森破啊.OJ因超时无法通过,所以我们需要优化我们的算法,使其在更有效的算出结果来.我们可以用递归来折半计算,每次把n缩小一半,这样n最终会缩小到0,任何数的0次方都为1,这时候我们再往回乘,如果此时n是偶数,直接把上次递归得到的值算个平方返回即可,如果是奇数,则还需要乘上个x的值.还有一点需要引起我们的注意的是n有可能

50 Pow(x, n)(求x的n次方Medium)

题目意思:x为double,n为int,求x的n次方 思路分析:直接求,注意临界条件 1 class Solution { 2 public: 3 double myPow(double x, int n) { 4 if(x==1.0)return x; 5 else if(x==-1.0){ 6 if(n%2==0)return 1.0; 7 else return -1.0; 8 } 9 double ans=1.0; 10 int flag=abs(n); 11 while(flag--&

【LeetCode-面试算法经典-Java实现】【050-Implement pow(x, n)(求x的n次方)】

[050-Implement pow(x, n)(求x的n次方)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Implement pow(x, n). 题目大意 求x的n次方. 解题思路 递归求解. 代码实现 算法实现类 public class Solution { public double myPow(double x, int n) { if (x == 0 && n == 0) { throw new IllegalArgumentExcepti

C语言求x的y次方,自定义函数,自己的算法

我是一名高二中学生,初中时接触电脑,非常酷爱电脑技术,自己百度学习了有两年多了,编程语言也零零散散的学习了一点,想在大学学习计算机专业,所以现在准备系统的学习C语言,并在博客中与大家分享我学习中的心得与思路.希望大牛路过的时候指点指点. 可以说是第N次学习C语言了,都是学到数组和函数这里停止了,这次下定了决心要学完C语言,不光要学完,还要学好下面是利用自定义函数写的一个模仿pow()函数工作的一个小程序[求x的y次方] 1 #include<stdio.h> 2 3 int main(void

C++刷题——2713: 函数---求x的y次方

编写函数POW,函数声明如下: int POW(int x,int y); //求x的y次方的函数声明 在以下程序的基础上,添加POW函数的定义,使程序能够正确执行. /* All rights reserved. * 文件名称:test.cpp * 作者:陈丹妮 * 完成日期:2015年 5 月 22 日 * 版 本 号:v1.0 */ #include <iostream> using namespace std; int POW(int x,int y); //求x的y次方的函数声明 i

OJ刷题之《求a的b次方》

题目描述 编写函数POW,函数声明如下: int POW(int x,int y); //求x的y次方的函数声明 在以下程序的基础上,添加POW函数的定义,使程序能够正确执行. 提交时,只需要提交POW函数的定义代码即可. #include <iostream> using namespace std; int POW(int x,int y); //求x的y次方的函数声明 int main() { int a,b; cin>>a>>b; cout<<a&l

递归练习之求 x 的 N 次方

/********************************************************************************* Copyright (C), 1988-1999, drvivermonkey. Co., Ltd. File name: Author: Driver Monkey Version: Mail:[email protected] qq:196568501 Date: 2014.04.02 Description: 递归练习之求 x

23、给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 1 class Solution { 2 public: 3     double Power(double base, int exponent) { 4         int p = abs(exponent); 5       double r = 1.0; 6         while(p){ 7             if(p != 0) r *= base; 8   

算法导论-求x的n次方

目录 1.分治求x的n次方思路 2.c++代码实现 内容 1.分治求x的n次方思路T(n)=Θ(lgn) 为了计算乘方数a^n,传统的做法(所谓的Naive algorithm)就是循环相乘n次,算法效率为Θ(n).但是如果采用分治法的思想,算法效率可以提高到Θ(lgn),如下图所示. 2.c++代码实现 Power.h 1 #ifndef POWER_HH 2 #define POWER_HH 3 template<typename T> 4 class Power 5 { 6 public