博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指Offer之数值的整数次方(题11)
阅读量:5890 次
发布时间:2019-06-19

本文共 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
 
/****************************************
  
2     > File Name:test.c
  
3     > Author:xiaoxiaohui
  
4     > mail:1924224891@qq.com
  
5     > Created Time:2016年05月23日 星期一 22时37分14秒
  
6 ****************************************/
  
  
8 #include<stdio.h>
  
 
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
 
/****************************************
  
2     > File Name:test.c
  
3     > Author:xiaoxiaohui
  
4     > mail:1924224891@qq.com
  
5     > Created Time:2016年05月23日 星期一 22时37分14秒
  
6 ****************************************/
  
  
  
 
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,如需转载请自行联系原作者
你可能感兴趣的文章
java布局学习(新)
查看>>
MyBatis框架(6)动态sql
查看>>
IOS 数字键盘添加“完成”按钮
查看>>
事件的那些事
查看>>
程序员零起步(三)——求职面试
查看>>
事务拼接
查看>>
mysql中Access denied for user 'root'@'localhost' (using password:YES)
查看>>
删除重复节点
查看>>
.net请求Webservice简单实现天气预报功能
查看>>
Loj #3056. 「HNOI2019」多边形
查看>>
【3】数据库的表设计和初始化
查看>>
Django rest framework的基本用法
查看>>
正则表达式匹配非需要匹配的字符串(标题自己都绕晕了)
查看>>
沙盒目录介绍
查看>>
260. Single Number III
查看>>
C#链接阿里云KVStore
查看>>
P107、面试题15:链表中倒数第K个结点
查看>>
c#基础--字符串的处理_string类
查看>>
crossplatform---Nodejs in Visual Studio Code 10.IISNode
查看>>
CentOS 配置 ROR 环境
查看>>