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 第 50 题 (Pow(x, n))

LeetCode 第 50 题 (Pow(x, n)) Implement pow(x, n). 这个题目非常简短,求 xnx^n。其中nn 为整数。 最简单的想法就是用一个循环,将 xx 自乘...

实现pow(double x, int n)

整理来源: http://bbs.csdn.net/topics/390511135 (由于0^0有争议,在这儿取0^0=0) // 依次乘以n次x的值得到最终结果 double Power1(do...

【LeetCode】50. Pow(x, n)

【LeetCode】50. Pow(x, n)

LeetCode 050 Pow(x,n)

记录自己的LeetCode刷题过程,总结刷题过程中的心得体会。 加深对类型转换的理解。 首先, int a=INT_MIN; 则 int b =-a; //b仍然为INT_MI...

DAY21:leetcode #50 Pow(x, n)

Implement pow(x, n). Subscribe to see which companies asked this question class Solution(object):...

Pow(x, n) -- LeetCode

原题链接: http://oj.leetcode.com/problems/powx-n/  这道题是一道数值计算的题目,因为指数是可以使结果变大的运算,所以要注意越界的问题。如同我在Sqrt(x)这...

Pow(x, n)

题目描述: Implement pow(x, n). 在进行该题目之前要先了解斐波那契数列的递归解法。 public class exercise { public static int Fi...

Single Number && Single Number II && Factorial Trailing Zeroes && Pow(x, n) && Add Two Numbers

Single Number 1、异或交换性质 int singleNumber(int A[], int n) { int ans = A[0]; for (i...

[leetcode] #50 Pow(x,n)

1.题目Implement pow(x, n).也就是要求实现幂的计算。2.蛮力法首先想到的当然是蛮力法,直接乘它个n次:double myPow(double x, int n) { for...

LeetCode Pow(x,n)(分治法)

大家好,我是刘天昊,今天来说说这题吧,之前有写过这题,那么先看题目 Implement pow(x, n). 实现x的n次方的计算 那么先来个正常人的思路,x*x*x......*x也就是n个x相乘...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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