#include<iostream>usingnamespace std;//二分法求幂,考虑n<0doublePow(int x,int n){double result =1;int y =0;int base = x;if(n ==0)return1;elseif(n <0)
y =-n;else
y = n;while(y !=0){//y是奇数base*resultif(y %2==1)
result *= base;
base *= base;
y = y/2;}if(n >0)return result;elsereturn1.0/result;}intmain(int argc,charconst*argv[]){double r =Pow(4,-1);
cout << r;return0;}
利用二进制求幂
#include<iostream>usingnamespace std;//利用二进制求x的n次幂,x,n均为整数;只考虑n的大小//例如求解2 ^ 10 那么10转化为二进制数字为1010 对应的位上分别为 8 4 2 1//2 ^ 10 可以转化为 2 ^ 8 * 2 ^ 2doublePow(int x,int n){int base = x;double result =1;int y;if(n ==0)return1;elseif(n <0)
y =-n;else
y = n;while(y !=0){//二进制的某一位是1,则乘以现在的baseif(y &1)
result *= base;//base平方
base *= base;//将指数右移1位
y >>=1;}if(n >0)return result;elsereturndouble(1.0/result);}intmain(int argc,charconst*argv[]){double r =Pow(5,-2);
cout << r << endl;return0;}