50. Pow(x, n)
题目
Implement pow(x, n).
Example 1:
Input: 2.00000, 10
Output: 1024.00000
Example 2:
Input: 2.10000, 3
Output: 9.26100
解析
- 主要考察,时间复杂度,x10=x5*x5=(x*x)5避免重复计算
 - 对负值和最小的MIN处理
 
// add 50. Pow(x, n)
class Solution_50 {
public:
	double myPow(double x, int n) { //n正负之分
		double ret = 1.0;
		if (n == 0)
		{
			return (double)1;
		}
		else if (n > 0)
		{
			while (n--) //超时
			{
				ret *= x;
			}
		}
		else
		{
			x = 1 / x;
			while (n++)
			{
				ret *= x;
			}
		}
		return ret;
	}
	double myPow2(double x, int n) { //n正负之分
		double ret = 1.0;
		if (n==0)
		{
			return (double)1;
		}
		if (n<0)
		{
			return 1 / x*myPow(x, n + 1); //递归太深
		}
		else
		{
			return x*myPow(x, n - 1);
		}
		return ret;
	}
	double myPow1(double x, int n) {
		double ret = 1.0;
		if (n == 0)
		{
			return (double)1;
		}
		if (n<0) //负数处理
		{
			ret = 1 / x; //防止最MIN溢出
			x = 1 / x;
			n = -(n+1);
		}
		if (n%2==0)
		{
			;
		}
		else
		{
			ret *= x; 
			n--;
		}
		double temp = myPow(x, n / 2);
		ret *= (temp*temp);
		return ret;
	}
	// 链接:https://www.nowcoder.com/questionTerminal/0616061711c944d7bd318fb7eaeda8f6
	double pow(double x, int n) {
		if (n == 0) return 1;
		if (n < 0) 
			return 1 / x * pow(1 / x, -(n + 1));
		if (n % 2 == 0) 
			return pow(x * x, n / 2);
		else 
			return pow(x * x, n / 2) * x;
	}
};
题目来源
    C/C++基本语法学习
STL
C++ primer
                    
                

                
            
        
浙公网安备 33010602011771号