#pragma warning(disable:4996) #include <cstdio> #include <tchar.h> #include <Windows.h> /* submit time : 3 1.Runtime Error 34.00515, -3 2.Runtime Error 1.00000, -2147483648 request : Implement pow(x, n). */ double powRecursively(double x, int n) { if (n == 0) return 1; if (n == 1) return x; if (n == 2) return x*x; if (n & 0x1) { double temp = powRecursively(x, (n - 1) >> 1); return x * temp * temp; } else { double temp = powRecursively(x, n >> 1); return temp*temp; } } double pow(double x, int n) { if (n == -2147483647 - 1) return 1.0 / x * pow(x, n + 1); int sign = n < 0 ? -1 : 1; n = n < 0 ? -n : n; return sign == 1 ? powRecursively(x, n) : 1.0 / powRecursively(x, n); } //=================Test================== void Test(double x, int n) { double result = pow(x, n); printf("pow(%lf, %d) is : %lf\n", x, n, result); } void Test1() { double x = 3.1415; Test(x, 5); } void Test2() { double x = 3.1415; Test(x, 50); } void Test3() { double x = 34.00515; Test(x, -3); } void Test4() { double x = 1.00000; Test(x, -2147483647-1); } int _tmain(int argc, _TCHAR* argv[]) { Test1(); Test2(); Test3(); Test4(); system("pause"); return 0; }
LeetCode_49pow [Pow(x, n)],布布扣,bubuko.com
原文:http://my.oschina.net/ITHaozi/blog/294142