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
|
本文转自 ye小灰灰 51CTO博客,原文链接:http://blog.51cto.com/10704527/1783640,如需转载请自行联系原作者