任何十进制数都可以用二进制来表示,且每一位最多为1,最少为0。
举个例子,15=2°×1+2¹×1+2²×1+2³×1。利用二进制转换方法可将15转换为1111(拆分成二的幂)。
那么a^15就等于[a^(2°×1)]×[a^(2¹×1)]×[a^(2²×1)]×[a^(2³×1)],即:a的二次方幂与15在二进制位上的各位的乘积再相乘。
代码实现:
long double power(long double a,int n)
{
long double b=a;//复制底数
long double result=1;
while (n)//条件:当n不为0(二进制转换未完成)
{
if (n%2)//当n%2不等于0时符合条件,说明n在这一二进制位上为1
result*=b;
b*=b;//下一个二进制位的幂
n/=2;//进入下一个二进制位的转换
}
}//直到a的所有二进制位幂相乘完成,n无法再进行2的取模时,n的二进制位转换完成,循环结束
return result;
}