//面试题16.数值的整数次方

//题目:实现函数double Power(double base,int exponent),求base的exponent次方。

//不得使用库函数,同时需要考虑大数问题。

#include<iostream>

using namespace std;

bool g_InvalidInput = false;

bool equal(double num1, double num2);

double PowerWithUnsignedExponent(double base, unsigned int exponent);

double Power(double base, int exponent)

{

g_InvalidInput = false;

//如果底数base为0,并且指数exponent小于0,那么返回0.0代表错误;全局变量g_InvalidInput设置为true

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类型数值的非负整数次方

double PowerWithUnsignedExponent(double base, unsigned int exponent)

{

if (exponent == 0)

return 1.0;

if (exponent == 1)

return base;

//如果指数n是偶数,那么 a^n = a^(n/2) * a^(n/2);

//如果指数n是奇数,那么 a^n = a^((n-1)/2) * a^((n-1)/2) * a;

//位运算比四则运算的效率要高很多

double result = PowerWithUnsignedExponent(base, exponent >> 1);//右移一位,相当于除2。例如,要求2的四次方,我们先求2的平方

result *= result;//再求2的平方的平方

if ((exponent & 0x1) == 1)//数值与1做与运算,可以用来判断该数值是偶数还是计数,如果结果为1代表为奇数

result *= base;

return result;

}

//判断两个double类型的数值是否相等,不能只能利用num1==num2,因为计算机精度不能控制完全为0

bool equal(double num1, double num2)

{

if ((num1 - num2 < 0.00000001) && (num1 - num2) > -0.00000001)

return true;

else

return false;

}

//====================================测试代码==================================================

void Test(const char*testname, double base, int exponent, double expectedResult, bool expectedFlag)

{

double result = Power(base, exponent);

if (equal(result, expectedResult) && g_InvalidInput == expectedFlag)

cout << testname << " passed." << endl;

else

cout << testname << " failed" << endl;

}

int main()

{

//底数为正数,指数为正数

Test("Test01", 2, 3, 8, false);

//底数为负数,指数为正数

Test("Test02", -2, 3, -8, false);

//底数为0,指数为正数

Test("Test03", 0, 2, 0, false);

//底数为正数,指数为负数

Test("Test04", 2, -3, 0.125, false);

//底数为正数,指数为0

Test("Test05", 2, 0, 1, false);

//底数为0,指数为0

Test("Test06", 0, 0, 1, false);

//底数为负数,指数为负数

Test("Test07", -2, -3, -0.125, false);

//底数为0,指数为负数

Test("Test08", 0, -3, 0, true);

system("pause");

return 0;

}

double取整数部分_剑指offer_16_数值的整数次方相关推荐

  1. 剑指offer16. 数值的整数次方P110

    剑指offer16. 数值的整数次方P110 题目:实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要 ...

  2. 剑指Offer_12_数值的整数次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解题思路 当exponent为0时,返回1,当exponent大于0,那么循环 ...

  3. 剑指offer-11.数值的整数次方实现power

    0 题目 给定一个double类型的浮点数base和int类型的整数exp.求base的exp次方. 1 分析 输入的exp指数可能是负数,base可能是0.但因为是double所以不能用等号判断 另 ...

  4. 剑指offer.数值的整数次方

    实现函数double Power(double base, int exponent),求base的 exponent次方.不得使用库函数,同时不需要考虑大数问题. 注意: 不会出现底数和指数同为0的 ...

  5. 剑指offter27. 数值的整数次方-java实现

    本文中讨论了三种解法 详细的介绍了快速幂对于指数是负数的情况,同时指数的范围的Int 的负极限 原题链接 实现函数double Power(double base, int exponent),求ba ...

  6. 2021-07-11剑指offer16.数值的整数次方

    class Solution {public double myPow(double x, int n) {if(x == 0) return 0;//考虑到特殊的情况,如果为零就直接返回,否则可能会 ...

  7. 剑指offer 数值的整次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解决方案: public class Solution {public dou ...

  8. 剑指Offer--数值的整数次方

    问题描述:给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路:  * 1.全面考察指数的正负.底数是否为零等情况.  * 2.写出指数 ...

  9. C++ 力扣剑指Offer16-数值的整数次方

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

最新文章

  1. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
  2. Git客户端(TortoiseGit)基本使用详解
  3. linux 报错 E: 无法定位软件包 python-lzma
  4. [转]系统吞吐量(TPS)、用户并发量、性能测试概念和公式---学习
  5. c 中连接mysql登录不成功_数据库连接失败的原因分析及解决办法 | 学步园
  6. I love exam HDU - 6968
  7. 计算机模拟定点突变,分子模拟对接和定点突变提高10β–去乙酰巴卡亭-华南农业大学学报.PDF...
  8. 使用Cloud Studio在线编写、调试和管理Spring Boot应用
  9. java字符串定义_java字符串基本概念
  10. CCNA11月20日战报
  11. win桌面显示html,win10怎么把ie图标放桌面上 win10桌面添加ie浏览器图标的方法
  12. 解决在MyEclipse中,process报launching client等待的问题
  13. 【Column Generation思考-02】|从对偶的角度理解Cutting Stock Problem【更新版本】
  14. c语言课程农夫过河问题实验心得,农夫过河实验报告
  15. IP更新、释放、清除DNS的详细操作方法
  16. vue3+vuetify安装
  17. node.js+小程序基于微信小程序的校园失物招领系统毕业设计源码072343
  18. 什么是哈希洪水攻击(Hash-Flooding Attack)?
  19. SQL常用查询语法整理
  20. 爬虫实战--简单爬取小说网站的小说(面对过程)

热门文章

  1. 蚌埠计算机对口招学生谈谈,蚌埠市865人报名对口高考
  2. 单摆运动属于什么现象_在学习高中物理中有什么好的经验可以分享?
  3. 一文盘点MWC 2019所有5G设备和研发进展
  4. 【细品架构8/100】好代码是架构的根基
  5. 动态规划练习1--Unique Paths
  6. CentOS6.5更改ssh端口问题
  7. Kubernetes 1.3版本之简单安装
  8. Qt开发,图文详解Hello World全过程
  9. jQuery AJAX 网页无刷新上传示例
  10. 名称的特殊处理(Name Mangling)