11_Power
代碼和詳細注釋如下:
#include<iostream> #include<math.h> bool g_InvalidInput = false; bool equal(double num1, double num2); double PowerWithUnsignedExponent(double base, unsigned int exponent);double Power(double base, int exponent) {g_InvalidInput = false;if (equal(base, 0.0) && exponent < 0)//如果基數(shù)是零,并且指數(shù)<0的話,那么這個時候可能會出現(xiàn)1/0的現(xiàn)象,由于除數(shù)不能為0,所以需要額外處理{g_InvalidInput = true;return 0.0;}unsigned int absExponent = (unsigned int)(exponent);if (exponent < 0)absExponent = (unsigned int)(-exponent);//這里其實是把指數(shù)求絕對值后再把指數(shù)中的小數(shù)部分給去除了。double result = PowerWithUnsignedExponent(base, absExponent);if (exponent < 0)result = 1.0 / result;//負指數(shù)情況處理return result; }/* double PowerWithUnsignedExponent(double base, unsigned int exponent) { double result = 1.0; / for(int i = 1; i <= exponent; ++i) result *= base;return result; } */ double PowerWithUnsignedExponent(double base, unsigned int exponent)//這里使用了一個公式來處理 {if (exponent == 0)//指數(shù)為0的情況return 1;if (exponent == 1)//指數(shù)為1的情況return base;double result = PowerWithUnsignedExponent(base, exponent >> 1);result *= result;if ((exponent & 0x1) == 1)result *= base;return result; }bool equal(double num1, double num2) {if ((num1 - num2 > -0.0000001)&& (num1 - num2 < 0.0000001))return true;elsereturn false; }// ====================測試代碼==================== void Test(double base, int exponent, double expectedResult, bool expectedFlag) {double result = Power(base, exponent);if (abs(result - expectedResult) < 0.00000001&& g_InvalidInput == expectedFlag)printf("Test passed.\n");elseprintf("Test failed.\n"); }int main() {// 底數(shù)、指數(shù)都為正數(shù)printf("Test1 begins.\n");Test(2, 3, 8, false);// 底數(shù)為負數(shù)、指數(shù)為正數(shù)printf("Test2 begins.\n");Test(-2, 3, -8, false);// 指數(shù)為負數(shù)printf("Test3 begins.\n");Test(2, -3, 0.125, false);// 指數(shù)為0printf("Test4 begins.\n");Test(2, 0, 1, false);// 底數(shù)、指數(shù)都為0printf("Test5 begins.\n");Test(0, 0, 1, false);// 底數(shù)為0、指數(shù)為正數(shù)printf("Test6 begins.\n");Test(0, 4, 0, false);// 底數(shù)為0、指數(shù)為負數(shù)printf("Test7 begins.\n");Test(0, -4, 0, true);return 0; }代碼中提到的公式的意思就是上面兩個截圖中的公式,公式的意思是,例如
連續(xù)兩個2^5相乘就是2^10
沒必要費勁兒去循環(huán)10次了,5+1次即可。
總結(jié)
- 上一篇: 09_Fibonacci
- 下一篇: 面试题之丑数的C++实现求解(孤陋寡闻了