题目描述:给定数字a,b,求a^b。
思路:
解法包括常规求幂、二分求幂、快速求幂(位运算)。
每一种求法中,要根据b的值进行讨论,b=0,>0,<0。
1)常规求幂
常规求幂即是根据ans=a*a*a*a。。。
根据b的个数来就行求解
2)二分求幂
二分求幂是可以将乘法进行分组
比如a*a*a*a*a*a=(a*a)*(a*a)*(a*a),这样就将6次乘法变成了3次乘法运算。
所以二分求幂即是根据矩阵乘法的结合律,减少重复计算的次数。
3)快速求幂(位运算)
因为幂数b可以看成是一个二进制,每一个1都可以看成是2的倍数。
a^21=(a^16)*(a^4)*(a^1)。
而21的二进制表示为10101。
而每次将b的二进制从右到左与1进行&运算。
代码如下:
#include<iostream>
using namespace std;
double Pow1(double, int);//常规求幂
double Pow2(double, int);//二分求幂
double Pow3(double, int);//快速求幂,位运算
int main(){
double a;
int b;
while (cin >> a >