就是一个二分法快速幂。
但是需要注意的问题是这里是实数,而且n可能为负。
int的范围是-2,147,483,648 至 2,147,483,647。如果为-2,147,483,648那么直接n=-n就爆int了。所以先要把n换成longlong。
class Solution { public: double myPow(double x, int n) { double ans = 1; unsigned long long p; if (n < 0) { p = -n; x = 1 / x; } else { p = n; } while (p) { if (p & 1) ans *= x; x *= x; p >>= 1; } return ans; } };
时间: 2024-09-27 03:20:59