-
剑指Offer面试题11数值的整数次方
2017-03-05 00:14:19注意:判断两个小数是否相等不能用==,因为计算机表示小数有误差,我们只能判断它们差的绝对值是否在一个很小的范围内。 题外话:程序错误处理的三种方法:返回值、全局变量、异常。返回值好处是根据返回值判断错误...面试题11:数值的整数次方
实现函数double Power(double base,int exponent),求base的exponent次方,不得使用库函数,不用考虑大数问题。
注意:判断两个小数是否相等不能用==,因为计算机表示小数有误差,我们只能判断它们差的绝对值是否在一个很小的范围内。
题外话:程序错误处理的三种方法:返回值、全局变量、异常。返回值好处是根据返回值判断错误原因,缺点是函数只能返回一个值,使用不便。全局变量不会占用函数返回结果。异常更清晰明了,但有些语言不支持。
本题一般思路的Java实现如下:
但以上程序的计算过程并不是效率最高的,因为假如求32次方,要循环31次,但如果我们已经求出了16次方,再平方一次就好了,而16可以由8再平方,以此类推。public class Power { private double power(double base,int exponent) throws Exception{ double result = 0.0; if(equal(base,0.0) && exponent<0){ throw new Exception("0的负数次幂无意义"); } if(exponent == 0){//其中0的0次方没有意义,返回0或1都可以 return 1.0; } if(exponent > 0){ result = powerWithExponent(base, exponent); }else{//负数次幂 result = powerWithExponent(1.0/base, -exponent); } return result; } //计算结果 private double powerWithExponent(double base,int exponent){ double result = 1.0; for(int i=1;i<=exponent;i++){ result = result * base; } return result; } //判断两个小数是否相等 private boolean equal(double num1,double num2){ if( ((num1-num2) > -0.0000001) && (num1-num2) < 0.0000001 ){ return true; }else return false; } public static void main(String[] args) throws Exception { Power test = new Power(); System.out.println(test.power(2, 3)); } }
归纳为当n为偶数时,a^n=a^(n/2)*a^(n/2),n为奇数时,a^n=a^((n-1)/2)*a^((n-1)/2)*a,计算量会减少,可以用递归实现,复杂度从O(n)变成了O(logn)。
细节:用右移运算符代替除以2,用与运算符代替取余来判断奇偶,因为位运算符效率高很多。程序如下:
private double powerWithExponent2(double base,int exponent){ if(exponent == 0) return 1; if(exponent == 1) return base;//两个递归终止的条件 double result = powerWithExponent2(base, exponent >> 1);//用右移1位代替除2 result *= result; if( (exponent & 1) == 1) result *= base;//二进制最低位为1,则为奇数 return result; //以输入(2,6)为例进行说明:开始后,进入第一次递归,输入为(2,3) //然后进入第二次递归,输入为(2,1),此时exponent为1,返回base为2,也就是说第二次递归的执行结果为2 //然后回到了第一次递归,里头的result值为第二次递归的结果2,然后向下执行,result为2*2,第一次递归时exponent为3,result=4*2,返回8 //所以第一次递归的执行结果为8,然后回到原函数,里头的result为8,然后执行8*8,此时exponent为6,最终结果就是64。 }
-
如何优雅地取数值的整数和小数部分
2020-12-31 08:57:07这样就保证返回值始终在0.0~1.0的区间内。 <pre><code>js function fract(num) { return num - Math.floor(num); } console.log(-3.75 % 1); // -0.75 console.log(fract(num)); // 0.25 </code></pre> 好了... -
C语言程序设计标准教程
2009-05-22 18:41:51由用户定义的这种要返回函数值的函数,必须在函数定义和函数说明中明确返回值的类型。 (2)无返回值函数 此类函数用于完成某项特定的处理任务, 执行完成后不向调用者返回函数值。这类函数类似于其它语言的过程。... -
我整理的VBA 自定义函数大全 共138页
2008-11-21 16:14:0334.在多个工作表中查找一个范围内符合某个指定条件的项目对应指定范围加总求和 35.返回 Column 英文字 36.查找指定列名的列数 37.文字格式的时间(分:秒)转化为数字格式(秒) 38.将"hh:mm:ss"格式的时分秒数转换成秒数... -
易语言 茶凉专用模块
2010-05-04 12:26:36参数 是否后台, 逻辑型, 可空, 默认为假:可见到的颜色点 真:后台窗口内颜色点 .参数 色深, 整数型, 可空, 所截取的图片位深度,默认为16位(8,16,24,32) .子程序 超级延迟, , 公开, 无资源占用的延时(无返回值) .参数... -
你必须知道的495个C语言问题
2015-10-16 14:14:286.22 如何在一个文件中判断声明为extern的数组的大小(例如,数组定义和大小在另一个文件中)?sizeof操作符似乎不行。 6.23 sizeof返回的大小是以字节计算的,怎样才能判断数组中有多少个元素呢? 第7章 内存分配 ... -
在判断底数base是不是等于0的时候,不能直接写base==0, 因为计算机内表示小数时有误差,只能判断他们的差的绝对值是不是在一个很小的范围内。如果采用递归解法,当n为偶数, an = an/2 * an/2,当n为奇数, an = a(n-1)/...
-
php高级开发教程说明
2008-11-27 11:39:22因为这些语言集中在一个有限的应用领域内,他们的成功性也限制在这些领域。 像C和P a s c a l这样的语言变得如此流行,就是因为它们被广泛应用,并且它们不针对特殊问题, 却提供了能很好地解决普遍问题的工具。 ... -
javascript入门笔记
2018-05-15 15:01:07使用场合:任意数字与1做按位与操作,可以判断奇偶性,结果为1,则为奇数,否则为偶数 0 :0 1 :1 2 :10 3 :11 4 :100 5 :101 5 & 1 101 001 ========== 001 4 & 1 100 001 ==== 000 2、按... -
C语言入门经典(第4版)--源代码及课后练习答案
2013-02-02 17:18:55本书是编程语言先驱者Ivor Horton的经典之作,是C语言方面最畅销的图书品种之一,在世界范围内广受欢迎,口碑极佳。 本书的目标是使你在C语言程序设计方面由一位初学者成为一位称职的程序员。 内容简介 本书是... -
C/C++笔试题(附答案,华为面试题系列)
2008-11-14 15:36:11那就是,这个函数被限制在声明它的模块的本地范围内使用 2.引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能被改变,指针可以改变所指的对象。 3) 不存在指向空值的引用,但是... -
C语言FAQ 常见问题列表
2010-10-28 16:41:29o 3.8 如何向接受结构参数的函数传入常数值? o 3.9 怎样从/向数据文件读/写结构? o 3.10 我的编译器在结构中留下了空洞, 这导致空间浪费而且无法与外部数据文件进行 "二进制" 读写。能否关掉填充, 或者控制结构... -
易语言程序免安装版下载
2011-04-07 09:28:50数据库操作支持库增加读写长整数字段的功能,但受限于系统接口暂不能读写超出整数范围的数值。 7. 修改高级表格支持库,通过鼠标调整行高列宽时不改变当前光标行列号。 8. 修改BUG:在IDE中打开源代码文件(.e)后... -
C#开发实战1200例(第1卷).(清华出版.王小科.王军.扫描版).part1
2016-06-16 20:55:43实例290 获得弹出对话框的相关返回值 实例291 使用OpenFileDialog组件打开文件 实例292 设置OpenFileDialog组件中只能选择图片文件 实例293 使用OpenFileDialog组件打开多个文件 实例294 使用SaveFileDialog... -
C#开发实战1200例(第1卷).(清华出版.王小科.王军.扫描版).part2
2016-06-16 20:59:52实例290 获得弹出对话框的相关返回值 实例291 使用OpenFileDialog组件打开文件 实例292 设置OpenFileDialog组件中只能选择图片文件 实例293 使用OpenFileDialog组件打开多个文件 实例294 使用SaveFileDialog... -
C#开发实战1200例(第1卷).(清华出版.王小科.王军.扫描版).part3
2016-06-16 21:02:21实例290 获得弹出对话框的相关返回值 实例291 使用OpenFileDialog组件打开文件 实例292 设置OpenFileDialog组件中只能选择图片文件 实例293 使用OpenFileDialog组件打开多个文件 实例294 使用SaveFileDialog... -
华为编程开发规范与案例
2008-09-04 16:44:56这样就保证了循环变量i的值在正常范围内,从而避免了对指针pDBFat进行内存越界的操作。 从上面的测试过程中,我们可以看到:如此严重的问题,仅仅是一个简单的错误引起的。实际上,系统的不稳定往往是由这些看似... -
C语言入门经典(第4版)--详细书签版
2013-02-02 17:16:50本书是编程语言先驱者Ivor Horton的经典之作,是C语言方面最畅销的图书品种之一,在世界范围内广受欢迎,口碑极佳。 本书的目标是使你在C语言程序设计方面由一位初学者成为一位称职的程序员。 内容简介 本书是... -
你必须知道的495个C语言问题(高清版)
2010-03-31 16:24:091.30 如何判断哪些标识符可以使用,哪些被保留了? 15 初始化 18 1.31 对于没有显式初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零? 18 1.32 下面的... -
EL表达式 (详解)
2009-12-24 14:32:53范围内的变量.applicationScope表示应用范围的变量. 3 --<%@ page isELIgnored="true"%> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁 止.JSP2.0中默认的启用EL语言. 4-- EL语言可显示 逻辑表达式如${true ... -
C#开发实战1200例(第一卷+第二卷)+源码下载地址.txt
2019-05-17 09:24:24实例020 使用条件运算符判断指定年份是不是闰年 25 实例021 使用流程控制语句报销业务花销 26 2.3 关键字的使用 27 实例022 使用checked关键字处理“溢出”错误 27 实例023 使用typeof关键字获取类的... -
excel中161个VBA_自定义函数超级实用
2018-03-28 08:36:32函数作用:在多个工作表中查找一个范围内符合某个指定条件的项目对应指定范围加总求和..........................59 '35.函数作用:返回 Column 英文字.......................60 '36.函数作用:查找指定列名的列数....... -
JavaScript笔记
2018-09-28 11:21:56|--arr.indexOf(x) 返回x在数组中的下标---经常用于判断元素是否存在。如返回-1,x则不在数组中 18.Number对象: |--x.toFixed(num):可把Number四舍五入为指定小数位数(num:0-20)的数字 |--x.toString():用于把... -
JAVA面试题最全集
2010-03-13 13:09:10如何将数值型字符转换为数字(Integer,Double) 如何将数字转换为字符 如何取小数点前两位,并四舍五入。 4.日期和时间 如何取得年月日,小时分秒 如何取得从1970年到现在的毫秒数 如何获取某个日期是当月的... -
精易模块[源码] V5.15
2015-03-21 22:03:37返回值:0=最高,1=高于标准,2=实时,3=标准,4=低于标准,5=低,返回-1表示无权限访问进程。 2、新增“进程_置优先级”,特殊进程需要特权,设置一个进程的优先级别,成功返回真,失败返回假。 3、新增“窗口_取激活句柄... -
《你必须知道的495个C语言问题》
2010-03-20 16:41:181.30 如何判断哪些标识符可以使用,哪些被保留了? 15 初始化 18 1.31 对于没有显式初始化的变量的初始值可以作怎样的假定?如果一个全局变量初始值为“零”,它可否作为空指针或浮点零? 18 1.32 下面的... -
LINGO软件的学习
2009-08-08 22:36:50在主窗口内的标题为LINGO Model – LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。下面举两个例子。 例1.1 如何在LINGO中求解如下的LP问题: 在模型窗口中输入如下代码: min=2*x1+3*... -
精通正则表达式(中英)
2011-09-08 13:18:58用环视功能为数值添加逗号 59 text-to-html转换 67 回到单词重复问题 77 第3章:正则表达式的特性和流派概览 83 在正则的世界中漫步 85 正则表达式的起源 85 最初印象 91 正则表达式的注意事项和处理方式 93 集成式... -
语言程序设计课后习题答案
2012-12-27 17:02:37语句if(x == 3)首先判断x的值是否为3,若相等条件表达式的值为ture,否则为false。 2-15 什么叫做作用域?什么叫做局部变量?什么叫做全局变量,如何使用全局变量? 解: 作用域是一个标识符在程序正文中有效的...
收藏数
55
精华内容
22
-
ST7732_V1.5.1_20071101.pdf
-
Mycat 实现 MySQL的分库分表、读写分离、主从切换
-
psg_slsi_051130.pdf
-
js严格模式
-
SpringBoot中application.yml基本配置详情
-
S6D0147_V0.3_20050607.pdf
-
华为1+X——网络系统建设与运维(高级)
-
MySQL 备份与恢复详解(高低版本 迁移;不同字符集 相互转换;表
-
Unity RUST 逆向安全开发
-
ST7669A Ver 1.1.pdf
-
用Go语言来写区块链(一)
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
MySQL 四类管理日志(详解及高阶配置)
-
ST7781%20Application.pdf
-
ThreadPoolTaskExecutor和ThreadPoolExecutor区别
-
【LeetCode】《剑指Offer》第Ⅳ篇⊰⊰⊰ 32 - 38题
-
S6D0154_V0.10_20070416.pdf
-
MySQL 多实例安装 及配置主从复制实验环境
-
【Python-随到随学】 FLask第一周
-
vue生命周期