博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【剑指offer】的功率值
阅读量:5225 次
发布时间:2019-06-14

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

标题叙述性说明:

       实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数。同一时候不须要考虑大数问题。

分析描写叙述:

       对于实现一个函数,首先要做的就是全面考虑它的參数的所有可能。对于此题中的数值函数,应该考虑的參数有整数、0、负数、浮点型、整型、是不是大数问题等。

       假设exponent是负数,则所求的幂函数中。base不能是0。否则就会出现0做除数的问题。对于这样的错误,能够通过指定标志的方法给出

假设exponent是负数。应该求base的(-exponent)的幂数的倒数。另外,假设base为0.0,exponent也为0时,没有意义,

int flag = 0;//标志位,假设base和exponent都为0时,设置该位double power(double base, int exponent){	if(equal(base, 0.0) && exponent < 0){/*此处不能简单的用base == 0.0来比較*/		flag = 1;		return 0.0;		}	unsigned int absexponent = (unsigned int)exponent;	if(exponent < 0)			absexponent = (unsigned int)(-exponent);/*假设exponent小于零,求它的绝对值*/	double result = PowerWithUnsignedExponent(base, absexponent);	if(exponent < 0)			result = 1.0 / result;	return result;}double PowerWithUnsignedExponent(double base, unsigned int absexponent){	double result = 1.0;	int i;	for(i = 1; i <= absexponent; ++i)			result *= base;	return result;}int equal(double num1, double num2){	if((num1 - num2 > -0.0000001) /*比較两个浮点数是否相等的方法*/			&&(num1 - num2) < 0.0000001)		return 1;
          上面的方法尽管能解决这个问题,但并不高效。假设exponent比較大,能够用第二种方法解决:

double PowerWithUnsignedExponent(double base, unsigned int absexponent){	if(absexponent == 0)		return 1;	if(absexponent == 1)		return base;	double result = PowerWithUnsignedExponent(base, absexponent >> 1);	result * = result;	if(absexponent & 0x1 == 1)		result *= base;	return result;}
       总结:上述程序所使用了错误的方法的第一段:全局变量的方法。还有另外两个办公事务处理方法:回报值法国、异常处理方法。

转载于:https://www.cnblogs.com/mengfanrong/p/4606043.html

你可能感兴趣的文章
vue:axios二次封装,接口统一存放
查看>>
vue中router与route的区别
查看>>
js 时间对象方法
查看>>
网络请求返回HTTP状态码(404,400,500)
查看>>
Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
查看>>
Mac下使用crontab来实现定时任务
查看>>
303. Range Sum Query - Immutable
查看>>
图片加载失败显示默认图片占位符
查看>>
【★】浅谈计算机与随机数
查看>>
《代码阅读方法与实现》阅读笔记一
查看>>
解决 sublime text3 运行python文件无法input的问题
查看>>
javascript面相对象编程,封装与继承
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>
Java中正则表达式的使用
查看>>
算法之搜索篇
查看>>
新的开始
查看>>
java Facade模式
查看>>
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>
SpringAop与AspectJ
查看>>
Leetcode 226: Invert Binary Tree
查看>>