博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求a的n次方
阅读量:5260 次
发布时间:2019-06-14

本文共 770 字,大约阅读时间需要 2 分钟。

此题面试时常有:

解答方法有以下三种:

1。 直接迭代求解,这个很简单,复杂度O(n)。

1。 分治法。复杂度 logn

此方法有点凹,原理是:a的n次方可以分别对应两种情况:

1。 n为偶数  那么 an= (a*a)n/2 

2。n为奇数 那么  an=  a*an-1

代码如下:

int
 power(
int
 a ,
int
 n)
{
     
if
(n 
==
 
0
)
          
return
 
1
;
     
if
(n
&
1
)
          
return
 a
*
power(a,n
-
1
);
     
else
          
return
 power(a
*
a,n
>>
1
);
}

 

3.此方法复杂度为 n的二进制表示中最高位1的index

原理为:事先建立a的 2m m为(0,x);的表。指导找到一个最小的x使得 n<2X然后 利用a中二进制位的位置和个数信息得到最终结果

#define
 MAX 32
int
 my_pow(
int
 a,
int
 n)
{
    
if
 (a 
==
 
1
  )
    {
        
return
 
1
;
    }
    
if
 (n 
==
0
)
    {
        
if
 (a 
==
 
0
)
            
return
 
-
1
;
        
return
 
1
 ;
    }
    unsigned 
int
 table[MAX];
    table[
0
=
 a; 
    
for
 (
int
 i 
=
 
1
;i
<
MAX 
&&
 i
<
n;i
++
)
    {
        table[i] 
=
 table[i
-
1
]
*
table[i
-
1
];
    }
    i 
=
 
0
;
    
int
 m 
=
 
1
;
    
while
 ( n
>>
i)
    {
        
if
(
1
&
n
>>
i)
            m 
=
 m 
*
table[i];
        i
++
;
    }
    
return
 m;
}

 

 

 

转载于:https://www.cnblogs.com/davidluo/articles/1799680.html

你可能感兴趣的文章
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
MetaWeblog API Test
查看>>
反弹SHELL
查看>>
关闭Chrome浏览器的自动更新和升级提示
查看>>
移动、尺寸改变
查看>>
poj2255Tree Recovery【二叉树重构】
查看>>
tcpcopy 流量复制工具
查看>>
vue和react的区别
查看>>
第十一次作业
查看>>
负载均衡策略
查看>>