/
// 1. 题目11 数值的整数次方

// 1.1 没有考虑负数和0的情况!!!!
double Power(double dBase, int iExponent)
{double dRes = 1.0;for (int i = 0; i < iExponent; i++){dRes *= dBase;}return dRes;
}// 判断两个double是否相等
bool Equal(double lhs, double rhs)
{if ((lhs - rhs > -0.0000001) && (lhs - rhs < 0.0000001)){return true;}return false;
}double PowerWithUnsignedExponent(double dBase, unsigned int uiExponent)
{double dResult = 1.0;for (unsigned int i = 1; i <= uiExponent; i++){dResult *= dBase;}return dResult;
}// 1.2 全面但不够高效的算法
double Power_1(double dBase, int iExponent)
{double dResult = 0.0;if (Equal(dBase, 0.0) && iExponent < 0){return dResult;}unsigned int absExponent = (unsigned int)iExponent;if (iExponent < 0){absExponent = (unsigned int)(-iExponent);}dResult = PowerWithUnsignedExponent(dBase, absExponent);if (iExponent < 0){dResult = 1.0 / dResult;}return dResult;
}// 1.3 全面且高效的解法
// eg 如果输入iExponent = 32, PowerWithUnsignedExponent中需要循环31次
// 另一种解法: (a)32 --> ((a)16)2 --> (((a)8)2)2 -> ... --> (((((a)2)2)2)2)2  --> 运行5次double NewPowerWithUnsignedExponent(double dBase, unsigned int uiExponent)
{if (0 == uiExponent){return 1.0;}else if (1 == uiExponent){return dBase;}double dResult = NewPowerWithUnsignedExponent(dBase, uiExponent >> 1);dResult *= dResult;// 如果是基数if (uiExponent & 0x01){dResult *= dBase;}return dResult;
}double Power_2(double dBase, int iExponent)
{double dResult = 0.0;if (Equal(dBase, 0.0) && iExponent < 0){return dResult;}unsigned int absExponent = (unsigned int)iExponent;if (iExponent < 0){absExponent = (unsigned int)(-iExponent);}dResult = NewPowerWithUnsignedExponent(dBase, absExponent);if (iExponent < 0){dResult = 1.0 / dResult;}return dResult;
}void PowerTestFunc()
{cout << "\n\n --------------- PowerTestFunc Start -------------->" << endl;int aiArray[] = {-3, -2, -1, 0, 1, 2, 3, 4, 5, 6};int iLen = sizeof(aiArray) / sizeof(int);double dBase = 5;cout << "方法一: ==========================>>" << endl;for (int i = 0; i < iLen; i++){printf("[%lf] 的 %d 次方: %lf\n", dBase, aiArray[i], Power(dBase, aiArray[i]));}cout << "方法二: ==========================>>" << endl;for (int i = 0; i < iLen; i++){printf("[%lf] 的 %d 次方: %lf\n", dBase, aiArray[i], Power_1(dBase, aiArray[i]));}cout << "方法三: ==========================>>" << endl;for (int i = 0; i < iLen; i++){printf("[%lf] 的 %d 次方: %lf\n", dBase, aiArray[i], Power_2(dBase, aiArray[i]));}cout << "\n\n --------------- PowerTestFunc End -------------->" << endl;}

转载于:https://www.cnblogs.com/yzdai/p/11258684.html

题目11 数值的整数次方相关推荐

  1. 【剑指offer-Java版】11数值的整数次方

    不用库,实现pow()运算 很简单的题目,但是涉及到很多细节 比如 1) 结果非法或者出错的时候如何通知调用者: 可以采用返回特定值的方法-但是此处pow运算既可以返回正数 0 或者负数,所以此思路比 ...

  2. 剑指offer:面试题16. 数值的整数次方

    题目:数值的整数次方 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 示例 1: 输 ...

  3. 算法:数值的整数次方

    /**  *题目:数值的整数次方  *描述:给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.  *解决方案:  求次方得考虑exponen ...

  4. 11:数值的整数次方

    /*** 面试题11:数值的整数次方* 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方.*/ public class _11_power ...

  5. 剑指offer——面试题11:数值的整数次方

    剑指offer--面试题11:数值的整数次方 Solution1:基本算法 累乘,时间复杂度为O(n) 要考虑全部情况:指数 < 0, == 0 和 > 0. 注意在 if-else if ...

  6. 《剑指offer》-- 数组中的逆序对、最小的K个数、从1到n整数中1出现的次数、正则表达式匹配、数值的整数次方

    一.数组中的逆序对: 1.题目: 数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出 ...

  7. 【剑指offer - C++/Java】12、数值的整数次方

    在线题目链接:数值的整数次方 文章目录 1 题目描述 2 题目分析 2.1 方法1 循环 2.11 Java代码 2.12 C++代码 2.2 方法2 递归 2.21 Java代码 2.22 C++代 ...

  8. php实现数值的整数次方

    php实现数值的整数次方 一.总结 没有考虑到指数为负数的情况 二.php实现数值的整数次方 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exp ...

  9. double取整数部分_剑指offer_16_数值的整数次方

    //面试题16.数值的整数次方 //题目:实现函数double Power(double base,int exponent),求base的exponent次方. //不得使用库函数,同时需要考虑大数 ...

最新文章

  1. OCtaveResNet 测试
  2. Greenplum,HAWQ interval parser带来的问题 - TPCH 测试注意啦
  3. java IO(输入输出) 字节流
  4. Caffe2:添加CUDA路径
  5. BZOJ 3112 Zjoi2013 防守战线 单纯形
  6. 基础知识回顾——异常处理
  7. 中科大博士写外挂被抓,非法牟利300多万!
  8. 使用python开发json、csv数据格式转换工具
  9. windows下JDK环境配置与Android SDK环境配置
  10. suse 查看java版本_如何查看当前Linux的版本
  11. SPSS基础操作详解---系统环境设置篇
  12. 如何在桌面上显示我的计算机,Win10如何将我的电脑(此电脑)显示到桌面上?
  13. 2019 年第 31 周 DApp 影响力排行榜 | TokenInsight
  14. 力扣LeetBook<链表>学习笔记
  15. 2001-2019年300多个城市进口额、出口额、进出口额汇总
  16. #企业要求程序员统一电脑桌面,网友:桌面壁纸都不配拥有?
  17. 【软件测试技术】黑盒测试步骤设计详解
  18. 解决笔记本一插电源就死机蓝屏,drive_power_state_failure报错的问题
  19. 视觉SLAM十四讲:第3讲 三维空间刚体运动
  20. PHP利用CURL_MULTI实现多线程爆破

热门文章

  1. noip2009 靶形数独
  2. 演练3-1:留言管理系统的制作
  3. Entity Framework中IQueryable, IEnumerable, IList的区别
  4. Burrard 大桥
  5. 行人检测(Pedestrian Detection)资源
  6. php5.5.25升级到php5.6.30,加载yaf.so报错解决方法!
  7. npm package.json那些事
  8. GitHub 上值得关注的 iOS 开源项目
  9. Linux中强制结束一个进程的终极方法
  10. ASP.Net TextBox控件只允许输入数字