热门IT资讯网

剑指Offer之数值的整数次方(题11)

发表于:2024-11-28 作者:热门IT资讯网编辑
编辑最后更新 2024年11月28日,1 /**************************************** 2 > File Name:test.c 3 > Author:xiaoxiaohui 4




 1 /****************************************  2     > File Name:test.c  3     > Author:xiaoxiaohui  4     > mail:[email protected]  5     > Created Time:2016年05月23日 星期一 22时37分14秒  6 ****************************************/  7   8 #include  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     > File Name:test.c  3     > Author:xiaoxiaohui  4     > mail:[email protected]  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 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


0