創(chuàng)新互聯(lián)建站專注于鳳山企業(yè)網(wǎng)站建設(shè),自適應(yīng)網(wǎng)站建設(shè),成都做商城網(wǎng)站。鳳山網(wǎng)站建設(shè)公司,為鳳山等地區(qū)提供建站服務(wù)。全流程按需求定制網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
1 /**************************************** 2 > File Name:test.c 3 > Author:xiaoxiaohui 4 > mail:1924224891@qq.com 5 > Created Time:2016年05月23日 星期一 22時(shí)37分14秒 6 ****************************************/ 7 8 #include9 10 int flog = 0; 11 int power(double base, int exponent) 12 { 13 14 if(equal(base, 0,0)) //如果底數(shù)是0,則返回0.0,并且把flog置為非0值, 15 { //來(lái)檢查當(dāng)返回0時(shí)返回的是本身還是出錯(cuò)了。 16 flog = 1; 17 return 0.0; 18 } 19 20 int exp = exponent; //使指數(shù)為正數(shù) 21 if(exponent < 0) 22 { 23 exp = 0 - exponent; 24 } 25 26 int result = count(base, exp); 27 if(exponent < 0) 28 { 29 result = 1.0 / result; 30 } 31 32 return result; 33 } 34 35 int equal(double num1, double num2) 36 { 37 if( (num1 - num2) > -0.0001 && (num1 - num2) < 0.0001) 38 { 39 return 1; 40 } 41 else 42 { 43 return 0; 44 } 45 } 46 47 double count(double base, int num) 48 { 49 double result = base; 50 int i = 0; 51 for(; i < num - 1; i++) 52 { 53 result *= base; 54 } 55 return result; 56 }
1 /**************************************** 2 > File Name:test.c 3 > Author:xiaoxiaohui 4 > mail:1924224891@qq.com 5 > Created Time:2016年05月23日 星期一 22時(shí)37分14秒 6 ****************************************/ 7 8 9 10 //首先要排除base為0的情況,而為0并且當(dāng)規(guī)定返回0時(shí),為了區(qū)分是返回值為0還是返回錯(cuò)誤 11 //就要設(shè)置一個(gè)flog值。然后再區(qū)分指數(shù)為負(fù)值和正值的情況。然后算出結(jié)果返回。 12 13 14 #include15 16 int flog = 0; 17 int power(double base, int exponent) 18 { 19 20 if(equal(base, 0.0)) //如果底數(shù)是0,則返回0.0,并且把flog置為非0值, 21 { //來(lái)檢查當(dāng)返回0時(shí)返回的是本身還是出錯(cuò)了。 22 flog = 1; 23 return 0.0; 24 } 25 26 int exp = exponent; //使指數(shù)為正數(shù) 27 if(exponent < 0) 28 { 29 exp = 0 - exponent; 30 } 31 32 int result = count(base, exp); 33 if(exponent < 0) 34 { 35 result = 1.0 / result; 36 } 37 38 return result; 39 } 40 41 int equal(double num1, double num2) 42 { 43 if( (num1 - num2) > -0.0001 && (num1 - num2) < 0.0001) 44 { 45 return 1; 46 } 47 else 48 { 49 return 0; 50 } 51 } 52 53 double count(double base, int num) 54 { 55 if(num == 0) 56 { 57 return 1; 58 } 59 60 if(num == 1) 61 { 62 return base; 63 } 64 65 double result = count(base, num >> 1); 66 result *= result; 67 68 if(num & 1) //bit最后一位為1肯定是奇數(shù) 并且num除2只會(huì)得到偶數(shù),所以 69 { //遞歸內(nèi)部并不會(huì)執(zhí)行這一行 70 result *= base; 71 } 72 73 return result; 74 } 75 76 77 //總結(jié),當(dāng)返回值為0時(shí),要設(shè)置全局變量flog以區(qū)分返回值為0還是返回錯(cuò)誤。 78 //浮點(diǎn)數(shù)比較時(shí)要比較一個(gè)區(qū)間。 79 //算n次方可以看成斐波那契數(shù)列的算法。 80 //判斷是否為奇數(shù)可以按位與1