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 > 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
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。