- 利用二分法求幂
#include <iostream>
using namespace std;
//二分法求幂,考虑n<0
double Pow(int x, int n)
{
double result = 1;
int y = 0;
int base = x;
if(n == 0)
return 1;
else if(n < 0)
y = -n;
else
y = n;
while (y != 0)
{
//y是奇数base*result
if(y % 2 == 1)
result *= base;
base *= base;
y = y/2;
}
if(n > 0)
return result;
else
return 1.0/result;
}
int main(int argc, char const *argv[])
{
double r = Pow(4,-1);
cout << r;
return 0;
}
- 利用二进制求幂
#include <iostream>
using namespace std;
//利用二进制求x的n次幂,x,n均为整数;只考虑n的大小
//例如求解2 ^ 10 那么10转化为二进制数字为1010 对应的位上分别为 8 4 2 1
//2 ^ 10 可以转化为 2 ^ 8 * 2 ^ 2
double Pow(int x, int n)
{
int base = x;
double result = 1;
int y;
if (n == 0)
return 1;
else if(n < 0)
y = -n;
else
y = n;
while (y != 0)
{
//二进制的某一位是1,则乘以现在的base
if (y & 1)
result *= base;
//base平方
base *= base;
//将指数右移1位
y >>= 1;
}
if(n > 0)
return result;
else
return double(1.0/result);
}
int main(int argc, char const *argv[])
{
double r = Pow(5,-2);
cout << r << endl;
return 0;
}
版权声明:本文为weixin_44048823原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。