本文共 2739 字,大约阅读时间需要 9 分钟。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 1 /**************************************** 2 > File Name:test.c 3 > Author:xiaoxiaohui 4 > mail:1924224891@qq.com 5 > Created Time:2016年05月23日 星期一 22时37分14秒 6 ****************************************/ 7 8 #include<stdio.h> 9 10 int flog = 0; 11 int power( double base, int exponent) 12 { 13 14 if (equal(base, 0,0)) //如果底数是0,则返回0.0,并且把flog置为非0值, 15 { //来检查当返回0时返回的是本身还是出错了。 16 flog = 1; 17 return 0.0; 18 } 19 20 int exp = exponent; //使指数为正数 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 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | 1 /**************************************** 2 > File Name:test.c 3 > Author:xiaoxiaohui 4 > mail:1924224891@qq.com 5 > Created Time:2016年05月23日 星期一 22时37分14秒 6 ****************************************/ 7 8 9 10 //首先要排除base为0的情况,而为0并且当规定返回0时,为了区分是返回值为0还是返回错误 11 //就要设置一个flog值。然后再区分指数为负值和正值的情况。然后算出结果返回。 12 13 14 #include<stdio.h> 15 16 int flog = 0; 17 int power( double base, int exponent) 18 { 19 20 if (equal(base, 0.0)) //如果底数是0,则返回0.0,并且把flog置为非0值, 21 { //来检查当返回0时返回的是本身还是出错了。 22 flog = 1; 23 return 0.0; 24 } 25 26 int exp = exponent; //使指数为正数 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肯定是奇数 并且num除2只会得到偶数,所以 69 { //递归内部并不会执行这一行 70 result *= base; 71 } 72 73 return result; 74 } 75 76 77 //总结,当返回值为0时,要设置全局变量flog以区分返回值为0还是返回错误。 78 //浮点数比较时要比较一个区间。 79 //算n次方可以看成斐波那契数列的算法。 80 //判断是否为奇数可以按位与1 |