problem:
给定一个double类型的浮点数base和int类型的整数exponent,求base的exponent次方。
tip:
①考虑指数的正负,底数是否为0等情况
②写出指数的二进制的表达,例如13表达为1101.
③举例:10^1101 = 10 ^ 000110 ^ 010010 ^ 1000
④通过&1和>>1来逐位读取1101,为1时将该位代表的乘数累乘到最终结果
solution:
#include <iostream>
using namespace std;
double power(double base,int n)
{
double res = 1,cur = base;
int exponent;
if(n > 0) exponent = n;
else
if(n < 0) {
if (base == 0)
return 0;
exponent = -n;
}
else
return 1;
while(exponent != 0)
{
if((exponent&1==1))
res*=cur;//该位为1时累乘
exponent>>=1;//右移一位
cur*=cur;//当该位为1时需要累乘的值
}
return n>=0?res:(1/res);
}
int main() {
double base;
int n;
cin>>base>>n;
double m=power(base,n);
cout<<m<<endl;
}