double取整数部分_剑指offer_16_数值的整数次方
//面试题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_数值的整数次方相关推荐
- 剑指offer16. 数值的整数次方P110
剑指offer16. 数值的整数次方P110 题目:实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要 ...
- 剑指Offer_12_数值的整数次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解题思路 当exponent为0时,返回1,当exponent大于0,那么循环 ...
- 剑指offer-11.数值的整数次方实现power
0 题目 给定一个double类型的浮点数base和int类型的整数exp.求base的exp次方. 1 分析 输入的exp指数可能是负数,base可能是0.但因为是double所以不能用等号判断 另 ...
- 剑指offer.数值的整数次方
实现函数double Power(double base, int exponent),求base的 exponent次方.不得使用库函数,同时不需要考虑大数问题. 注意: 不会出现底数和指数同为0的 ...
- 剑指offter27. 数值的整数次方-java实现
本文中讨论了三种解法 详细的介绍了快速幂对于指数是负数的情况,同时指数的范围的Int 的负极限 原题链接 实现函数double Power(double base, int exponent),求ba ...
- 2021-07-11剑指offer16.数值的整数次方
class Solution {public double myPow(double x, int n) {if(x == 0) return 0;//考虑到特殊的情况,如果为零就直接返回,否则可能会 ...
- 剑指offer 数值的整次方
题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 解决方案: public class Solution {public dou ...
- 剑指Offer--数值的整数次方
问题描述:给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路: * 1.全面考察指数的正负.底数是否为零等情况. * 2.写出指数 ...
- C++ 力扣剑指Offer16-数值的整数次方
题目详情 /* * 实现函数double Power(double base, int exponent), * 求base的exponent次方.不得使用库函数,同时不需要考虑大数问题.示例 1: ...
最新文章
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
- Git客户端(TortoiseGit)基本使用详解
- linux 报错 E: 无法定位软件包 python-lzma
- [转]系统吞吐量(TPS)、用户并发量、性能测试概念和公式---学习
- c 中连接mysql登录不成功_数据库连接失败的原因分析及解决办法 | 学步园
- I love exam HDU - 6968
- 计算机模拟定点突变,分子模拟对接和定点突变提高10β–去乙酰巴卡亭-华南农业大学学报.PDF...
- 使用Cloud Studio在线编写、调试和管理Spring Boot应用
- java字符串定义_java字符串基本概念
- CCNA11月20日战报
- win桌面显示html,win10怎么把ie图标放桌面上 win10桌面添加ie浏览器图标的方法
- 解决在MyEclipse中,process报launching client等待的问题
- 【Column Generation思考-02】|从对偶的角度理解Cutting Stock Problem【更新版本】
- c语言课程农夫过河问题实验心得,农夫过河实验报告
- IP更新、释放、清除DNS的详细操作方法
- vue3+vuetify安装
- node.js+小程序基于微信小程序的校园失物招领系统毕业设计源码072343
- 什么是哈希洪水攻击(Hash-Flooding Attack)?
- SQL常用查询语法整理
- 爬虫实战--简单爬取小说网站的小说(面对过程)