题目描述
实现函数 $double Power(double base, int exponent)$,求 $base$ 的 $exponent$ 次方。
不得使用库函数,同时不需要考虑大数问题。
只要输出结果与答案的绝对误差不超过 $10^{-2}$ 即视为正确。
注意:
不会出现底数和指数同为$0$的情况
当底数为$0$时,指数一定为正
底数的绝对值不超过 $10$,指数的绝对值不超过 $10^9$。
样例1
输入:10 ,2
输出:100
样例2
输入:10 ,-2
输出:0.01
思路
这道题就是一道非常典型的快速幂了,如果直接循环的话最坏要循环$10^9$次,那就$TLE$了。
但还是有一些小细节要注意的:
- 如果质数是负数的话,要先把指数取绝对值,计算出来两个非负数的绝对值再取倒数。
- $int$的范围是$-2147483648$ ~ $2147483647$,对$-2147483648$取绝对值会爆掉。
代码
class Solution {
public:
double Power(double base, int exponent) {
//可以节省代码量
typedef long long LL;
double res = 1;
//指数是否为负数
bool f = exponent < 0;
//注意exponent要强转成long long类型
LL b = abs(LL(exponent));
//快速幂板子
while (b)
{
if (b & 1) res = res * base;
base *= base;
b >>= 1;
}
//如果质数是负数,那要取倒数
if (f) return 1 / res;
return res;
}
};
好了,这就是这篇题解的所有内容。感谢你的观看,Thanks♪(・ω・)ノ!
$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\quad$$\mathcal{writer\enspace by \enspace acwing}$ : $\mathfrak{天元之弈}$