pow(x,n)

原创 2017年01月03日 11:30:57

pow(x,n)一般在编程语言中会直接提供这样的方法,就是求xn,我们假设n是正整数,那么首先最基本的想法就是将n个x相乘:

int power(int x, unsigned int n)
{
    int ret = 1;
    for (int i = 0; i < n; i++) 
        ret *= x;

    return ret;
}

这么写是比较简单,但是时间复杂度为O(n),如果n比较大的时候,那么这个就比较耗时了。

我们可以用分治法来处理这个问题,xn=xn/2xn/2,于是代码就可以这么写了:

#include<stdio.h>
int power(int x, unsigned int n)
{
    if(n == 0)
        return 1;
    else if (n % 2 == 0)
        return power(x, n / 2) * power(x, n / 2);
    else
        return x * power(x, n / 2) * power(x, n / 2);
}

但是上面每个return都算了两次power(x, n / 2),为了避免重复的计算,我们可以将power(x, n / 2)计算出的结果存储起来:

int power(int x, unsigned int n)
{
    int temp;
    if(n == 0)
        return 1;
    temp = power(x, n / 2);
    if (n % 2 == 0)
        return temp * temp;
    else
        return x * temp * temp;
}

这样时间复杂度就成了O(logn)

假如n可能为负数,x可能为小数,那么pow(x,n)的写法如下:

float power(float x, int n)
{
    float temp;
    if(n == 0)
       return 1;
    temp = power(x, n / 2);       
    if (n % 2 == 0)
        return temp * temp;
    else
    {
        if(n > 0)
            return x * temp * temp;
        else
            return (temp * temp) / x;
    }
}  
版权声明:本文为博主原创文章,未经博主允许不得转载。

【leetcode 分治法】Pow(x, n)与Sqrt(x)函数的实现

int类型范围 -2147483648~2147483647 当n=-2147483648,则-n=2147483648超出2147483647,结果仍然是-2147483648,所以应该单独处理。 ...
  • u012162613
  • u012162613
  • 2014年11月21日 22:14
  • 2120

Pow(x, n) 求一个数的n次方

我们知道C++中是有pow函数的,我们这次自己来写个,因为有这样的算法题目。 所需数学知识: 大致考虑正数,0,负数即可。n多个数相乘的问题。 1.简单For循环 这还不简单,马上写一个f...
  • fox64194167
  • fox64194167
  • 2014年03月07日 09:50
  • 2577

[LeetCode-50] Pow(x, n)(数值的整数次方)

Implement pow(x, n). Subscribe to see which companies asked this question 【方法一】: 1)最直观容易想到的方法就是用递...
  • xy010902100449
  • xy010902100449
  • 2015年10月29日 20:19
  • 2583

pow(x,y)函数的用法及实现算法

pow函数是求次方的函数, 函数原型是double pow(double a,double b); 使用时应包含math.h头文件。 1,C/C++中的数学函数编辑 原型:在TC2.0...
  • changgui5211
  • changgui5211
  • 2015年07月11日 18:15
  • 6697

【Leetcode长征系列】Pow(x, n)

原题: Implement pow(x, n). 思路:递归计算pow。 class Solution { public: double pow(double x, int n) { ...
  • u010239096
  • u010239096
  • 2014年08月14日 13:53
  • 630

每日算法之三十九:Pow(x, n)

实现浮点类型的幂运算,函数原型为: double pow(double x, int n) 在求解这个问题的时候是一个很挣扎的过程,因为它不是报错而是一直提示你超出时间,那么必须一次次的考...
  • yapian8
  • yapian8
  • 2014年07月01日 21:54
  • 846

Leecode Pow(x, n)实现任意次方函数

实现任意次方函数,注意: 1 n可以为正和负 2 x可以为正和负 下面使用二分法求解,不过因为两个的子解是一样的,所以可以只求一边解就可以了,这就是最典型的减治法了。 下面给出二分,三分,五分...
  • kenden23
  • kenden23
  • 2013年12月09日 08:22
  • 1973

Linux下的C语言pow()函数引出的问题

Linux下的C语言pow()函数引出的问题 本文由 Ricky 发表于 2015 年 09 月 08 日 已浏览今天才Linux下用math.h库的pow()函数,gcc编译的时候报错返回:对‘p...
  • li740207611
  • li740207611
  • 2016年04月06日 09:37
  • 3539

实现浮点类型的幂运算,pow(x,n)

实现浮点类型的幂运算,函数原型为: double pow(double x, int n) 下面介绍一下解决该问题的几种方法以及要注意的地方: 1)最直观容易想到的方法就是用递归方法...
  • helen3he
  • helen3he
  • 2015年02月03日 14:01
  • 427

[算法分析与设计] leetcode 每周一题: 050. Pow(x, n)

题目链接:  50. Pow(x, n) 题目大意: double myPow(double x, int n) 的 pow函数 ; 例如: 给定输入 x = ...
  • sinat_37893507
  • sinat_37893507
  • 2017年12月20日 16:58
  • 9
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:pow(x,n)
举报原因:
原因补充:

(最多只允许输入30个字)