最近看到这样的一个题目求X的N次方,自己想了一些解决办法,记录一下留作日后参考。

求X的N次方,首先暴力求解:

int exp(int x, int n)

{

int ret = 1;

for(int i = 0; i < n; i++)

{

ret *= x;

}

return ret;

}

很简单就可以实现,算法的复杂度是O(N),那么有什么办法可以优化呢,现在是O(N),那么就要朝着O(logN)的方向进行优化,以25为例X^25,可以先考虑X^1, X^2 ,X^4, X^8, X^16,然而还差X^9,同理我们将9分解为X^1, X^2 ,X^4, X^8,余下的就是X^1,将每个步骤的最大次方提取出来就是X^16,X^8,X^1,其实就是将25分解成16,8,1也就是25的二进制表示11001。把25分解后如何处理呢,遍历25的每一位i,如果是1,那么result *= X(2^i),最后也就求出X^25 = X^1 * X^8 *X^16。

int exp(int x, int n)

{

int ret = 1;

if(n == 0)

return ret;

int k = n;

while(k != 0)

{

if((k & 0x1) != 0)

ret *= x;

x *= x;

k >>= 1;

}

return ret;

}

O(logN)的这种思路通过递归的方式实现理解起来比较简单。

int exp(int x, int n)

{

if(n == 0)

return 1;

if(n == 1)

{

return x;

}

else

{

int s;

int m = n / 2;

s = exp(x, m);

if(m % 2 == 0)

{

return s * s;

}

else

{

return s * s * x;

}

}

}

java语言不用pow函数求x的n次方_X的N次方求解——pow(x,n)实现相关推荐

  1. C语言不用strcmp函数比较字符串大小

    C语言不用strcmp函数比较字符串大小 #include <stdio.h> int main(){int i, res;char s1[100], s2[100];printf(&qu ...

  2. java语言不用担心内存吗_不用担心智能手机的电池,只需使用它

    java语言不用担心内存吗 When you're trying to get the most life out of your device, it's easy to overthink bat ...

  3. 不用聚合函数求最高工资

    对于emp 表,不用聚合函数求出最高工资 如果使用聚合函数的话,求出最高工资比较方便 select max(sal) from emp; 如果不使用聚合函数的话,该从哪个方向出发呢? 可以排序,然后从 ...

  4. Java编程语言学习:Java语言基础案例(如求两门课分数之差、三门课平均分、关系运算符作比较)之详细攻略

    Java编程语言学习:Java语言基础案例(如求两门课分数之差.三门课平均分.关系运算符作比较)之详细攻略 目录 Java语言基础案例 1.求两门课分数之差.三门课平均分: 2.关系运算符作比较

  5. 初学者  C语言如何通过函数求同心圆环面积

    C语言如何通过函数求同心圆环面积: #include <stdio.h> #include <stdlib.h> #define pr 3.1415926float getar ...

  6. 用Java语言进行简单的求1-100之间的求偶和,并把求和结果在控制台输出

    ##用Java语言进行简单的求1-100之间的求偶和,并把求和结果在控制台输出 话不多说直接上代码 在这里插入代码片 //求1-100之间的求偶和,并把求和结果在控制台输出 public class ...

  7. c语言学习-编写函数求x的n次方的值

    编写函数求x的n次方的值 程序流程图: 代码: #include<stdio.h> long mul(int j ,int k) {int i; long mu=1; for(i=0;i& ...

  8. c语言用循环函数求平方,用C语言程序三种循环语句分别编写程序,求1-100的平方值?...

    C语言用for语句求1~100中是3的倍数的所有整数之和,提供两种解法如下: 第一种:这是比较经典的方法: #include int main(){int sum=0;for(int i=1;i 由热 ...

  9. java对三次函数求导_如何画三次函数图像

    问题 请绘制 的图形 思路一 借助软件 软件名称 介绍 geogebra image.png GeoGebra是自由且跨平台的动态数学软件,提供各级教育使用,包含了几何.代数.表格.图形.统计和微积分 ...

  10. C语言——pow函数的使用,计算一个数的n次方

    文章目录 头文件引用 原型 如何实现用pow函数开n次方 头文件引用 include<math.h> 原型 double pow( double x, double y ): 如何实现用p ...

最新文章

  1. Tensorflow— 简单示例
  2. UIPasteboard 粘贴板
  3. mysql客户端( Navicat)远程登录操作问题 1142-create command denied to user×××
  4. Android Wifi 启动过程,AndroidP wifi启动流程
  5. spring AOP注解含义
  6. 两台老机器,AMD K6-2和Intel C366
  7. mysql 5.0.37.tar.gz_Linux下MySQL5.0.37安装配置步骤
  8. java 实现类似spring的可配置的AOP框架
  9. 杭州云栖大会10月起航,这里有一份最全的大会剧透
  10. 开启Github之旅
  11. 用C语言编写贪吃蛇小游戏
  12. 用DELPHI下载官方SVN中的示例原码
  13. 认识移动基站通信设备
  14. 【智能制造】请拿走这份精益培训PPT,不谢!
  15. word画流程图工具
  16. 性能、应用、安装,选择LoRaWAN温湿度传感器的关键
  17. synchronized,并发安全的守护神
  18. HDU 4826Labyrinth(dp)
  19. python爬虫:用无头浏览器selenium爬取taptap游戏榜单并保存为csv
  20. Unity3D-network网络相关(一)

热门文章

  1. 2020 语音识别领域最具商业合作价值企业盘点
  2. 001 《两、三位数除以一位数,笔算》三年级下
  3. 三翼鸟,用两年开启下一个十年
  4. vue中引用echarts设置渐变色new echarts不能用
  5. 【计算机毕业设计】ssm高校学生网上请假系统
  6. 用计算机写文章 单元备课,备课写教案
  7. 计算机毕业设计太难做不出来怎么办?
  8. Android 判断是否安装应用宝,并跳到应用中去
  9. word使用的奇技淫巧
  10. Win11 22H2四个你不知道的隐藏功能