数值的整数次方
2015-07-07 16:18
316 查看
解法一:不好的解法
double Power(double base,int exponent)
{
double result=1.0;
for(int i=1;i<=exponent;++i)
result*=base;
return result;
}
解法一没有考虑指数为0和负数的情况,只考虑了指数为正数的情况。
解法二:全面但不高效的解法
bool q_InvalidInput = false;
double Power(double base, int exponent)
{
g_InvalidInput = false;
if (equal(base, 0.0) && exponent < 0)
{
g_InvalidInput = true;
return 0.0;
}
unsigned int absExponent = (unsigned int)(exponent);
if (exponent < 0)
absExponent = (unsigned int)(-exponent);
double result = PowerWithUnsignedExponent(base,absExponent);
if (exponent < 0)
result = 1.0 / result;
return result;
}
double PowerWithUnsignedExponent(double base, unsigned int exponent)
{
double result = 1.0;
for (int i = 1; i <= exponent; ++i)
result *= base;
return result;
}
bool equal(double num1, double num2)
{
if ((num1 - num2 > -0.0000001) && (num1 - num2) < 0.0000001))
return true;
else
return false;
}
解法三:全面又高效的解法
使用公式求a的n次方:
将解法二的double PowerWithUnsignedExponent函数修改为:
double PowerWithUnsignedExponent(double base, unsigned int exponent)
{
if (exponent == 0)
return 1;
if (exponent == 1)
return base;
double result = PowerWithUnsignedExponent(base, exponent >> 1);
result *= result;
if (exponent & 0x1 == 1)
result *= base;
return result;
}
相关文章推荐
- tslib-触摸屏校准
- CentOS6.x安装zabbix
- WebRTC音频处理流程概述
- 操作系统实践(6)——特权级转移
- static 关键字
- C++之指针指向二维数组
- nodejs框架express4.x 学习--安装篇
- leetcode_53题——Maximum Subarray(动态规划)
- static 关键字
- MySQL 中文insert报错Incorrect string value: '\xCC\xEC\xB2\xC5'
- 【Android】2014年框架类源码年度精品汇总
- eclipse c++ 常用快捷键
- Logback 配置
- Apache Kafka:下一代分布式消息系统
- dedecms织梦图集上传图片无水印的解决办法
- Centos 6.4 minimal最小化安装完成后,光盘安装setup工具
- Laravel 4 系列入门教程(三)【最适合中国人的Laravel教程】
- log4net
- git 常用命令
- PHP学习笔记(十一):网上社区项目的知识点总结