java语言不用pow函数求x的n次方_X的N次方求解——pow(x,n)实现
最近看到这样的一个题目求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)实现相关推荐
- C语言不用strcmp函数比较字符串大小
C语言不用strcmp函数比较字符串大小 #include <stdio.h> int main(){int i, res;char s1[100], s2[100];printf(&qu ...
- java语言不用担心内存吗_不用担心智能手机的电池,只需使用它
java语言不用担心内存吗 When you're trying to get the most life out of your device, it's easy to overthink bat ...
- 不用聚合函数求最高工资
对于emp 表,不用聚合函数求出最高工资 如果使用聚合函数的话,求出最高工资比较方便 select max(sal) from emp; 如果不使用聚合函数的话,该从哪个方向出发呢? 可以排序,然后从 ...
- Java编程语言学习:Java语言基础案例(如求两门课分数之差、三门课平均分、关系运算符作比较)之详细攻略
Java编程语言学习:Java语言基础案例(如求两门课分数之差.三门课平均分.关系运算符作比较)之详细攻略 目录 Java语言基础案例 1.求两门课分数之差.三门课平均分: 2.关系运算符作比较
- 初学者 C语言如何通过函数求同心圆环面积
C语言如何通过函数求同心圆环面积: #include <stdio.h> #include <stdlib.h> #define pr 3.1415926float getar ...
- 用Java语言进行简单的求1-100之间的求偶和,并把求和结果在控制台输出
##用Java语言进行简单的求1-100之间的求偶和,并把求和结果在控制台输出 话不多说直接上代码 在这里插入代码片 //求1-100之间的求偶和,并把求和结果在控制台输出 public class ...
- c语言学习-编写函数求x的n次方的值
编写函数求x的n次方的值 程序流程图: 代码: #include<stdio.h> long mul(int j ,int k) {int i; long mu=1; for(i=0;i& ...
- c语言用循环函数求平方,用C语言程序三种循环语句分别编写程序,求1-100的平方值?...
C语言用for语句求1~100中是3的倍数的所有整数之和,提供两种解法如下: 第一种:这是比较经典的方法: #include int main(){int sum=0;for(int i=1;i 由热 ...
- java对三次函数求导_如何画三次函数图像
问题 请绘制 的图形 思路一 借助软件 软件名称 介绍 geogebra image.png GeoGebra是自由且跨平台的动态数学软件,提供各级教育使用,包含了几何.代数.表格.图形.统计和微积分 ...
- C语言——pow函数的使用,计算一个数的n次方
文章目录 头文件引用 原型 如何实现用pow函数开n次方 头文件引用 include<math.h> 原型 double pow( double x, double y ): 如何实现用p ...
最新文章
- Tensorflow— 简单示例
- UIPasteboard 粘贴板
- mysql客户端( Navicat)远程登录操作问题 1142-create command denied to user×××
- Android Wifi 启动过程,AndroidP wifi启动流程
- spring AOP注解含义
- 两台老机器,AMD K6-2和Intel C366
- mysql 5.0.37.tar.gz_Linux下MySQL5.0.37安装配置步骤
- java 实现类似spring的可配置的AOP框架
- 杭州云栖大会10月起航,这里有一份最全的大会剧透
- 开启Github之旅
- 用C语言编写贪吃蛇小游戏
- 用DELPHI下载官方SVN中的示例原码
- 认识移动基站通信设备
- 【智能制造】请拿走这份精益培训PPT,不谢!
- word画流程图工具
- 性能、应用、安装,选择LoRaWAN温湿度传感器的关键
- synchronized,并发安全的守护神
- HDU 4826Labyrinth(dp)
- python爬虫:用无头浏览器selenium爬取taptap游戏榜单并保存为csv
- Unity3D-network网络相关(一)