我是因為刷杭電的題目了解到了冪運算,那就貼一下杭電的題目好了
然後在貼一下別人關於冪運算的部落格
題目描述:給定數字a,b,求a^b。
思路:解法包括常規求冪、二分求冪、快速求冪(位運算)。
每一種求法中,要根據b的值進行討論,b=0,>0,<0。
1)常規求冪
常規求冪即是根據ans=aaa*a。。。
根據b的個數來就行求解
2)二分求冪
二分求冪是可以將乘法進行分組
比如aaaaaa=(aa)(aa)(aa),這樣就將6次乘法變成了3次乘法運算。
所以二分求冪即是根據矩陣乘法的結合律,減少重複計算的次數。
3)快速求冪(位運算)
因為冪數b可以看成是乙個二進位制,每乙個1都可以看成是2的倍數。
a21=(a16)*(a4)*(a1)。
而21的二進位制表示為10101。
而每次將b的二進位制從右到左與1進行&運算。
#includeusing namespace std;
double pow1(double, int);//常規求冪
double pow2(double, int);//二分求冪
double pow3(double, int);//快速求冪,位運算
int main()
system("pause");
return 0;}
//常規求冪
double pow1(double a, int b)
return r;
} if (b < 0)
return 1/r; }
} //二分求冪
double pow2(double a, int b)
if (b > 0)
base *= base;
b /= 2;
} return r;
} if (b < 0)
c /=2;
base *= base;
} return 1 / r; }
} //快速求冪,位運算
double pow3(double a, int b)
if (b > 0)
b >>=1;
base *= base;
} return r;
} else
c >>=1;
base *= base;
} return 1 / r;
}}
常規求冪 二分求冪 快速位求冪
題目描述 給定數字a,b,求a b。思路 解法包括常規求冪 二分求冪 快速求冪 位運算 每一種求法中,要根據b的值進行討論,b 0,0,0。1 常規求冪 常規求冪即是根據ans a a a a。根據b的個數來就行求解 2 二分求冪 二分求冪是可以將乘法進行分組 比如a a a a a a a a a...
二分求冪,快速求冪
1 2 3 4 5 6 7 8 9 10 11 12 intpow3 inta,intb returnr 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 intpow4 intx,intn result x n 1 whil...
快速求冪二分演算法
includeint a,b void input void pow1 base base base b b 2 每次進行縮半,對base base base這一步起到約束作用 printf d n r int main 二分演算法 求a b 二分法 此處b b 2 體現二分 base a base...