Advertisement

双精度浮点数类型的整数次方运算

阅读量:

已知一个double类型的浮点数值base与int类型的整数exponent,要求计算base的exponent次方。题目条件确保base与exponent不会同时为零。

解:该问题具有一定的特殊性,涉及到二分求幂算法以及对多种情况的判断处理。

首先了解二分求幂的基本原理(摘自:https://www.cnblogs.com/faterazer/p/10978074.html)):

对于任意指数𝑏,可以将其转换为二进制表示形式。在该二进制字符串中,所有值为1的位置所对应的数值,正是应用二分求幂法时所需的分解结果。以这一思路重新审视a31的例子,指数31的二进制形式为11111,其中从低位到高位每一个为1的位置所对应的数值分别为:20 = 1, 2^1 = 2, 2^2 = 4, ..., 2^4 = 16。值得注意的是a31可表示为a16 * ... * a^2 * a。

因此,在将指数转换为二进制形式后,只需在每一位为1的位置进行相应的乘法运算即可。针对a^b的计算过程可采用如下简化算法:

复制代码
 int fun(int a, int b) {

    
     int result = 1;
    
     while (b!=0) {
    
     if (b % 2 == 1) 
    
         result *= a;

全部评论 (0)

还没有任何评论哟~