0
点赞
收藏
分享

微信扫一扫

剑指offer(c++版本) (12)浮点数的整数次方(可直接运行)

宁静的猫 2022-01-21 阅读 51

目录

前言

一、题目

二、程序

1.头文件

2.类和主函数


前言

一、题目

给定⼀个 double 类型的浮点数 base int 类型的整数 exponent 。求 base exponent 次⽅。

二、程序

注意:由于 计算 机表示小数(包括 float double 型⼩数)都有误差,我们不能直接⽤等号( == )判断两个⼩数是否相等。一般来说,两个小数的差的绝对值小于10e-7,我们 就可以认为它们相等。

为了降低程序复杂度,用 base² 代替 base 代入运算。

1.头文件

#include <iostream>
#include <cmath>
using namespace std;

2.类和主函数

class solution
{
	public:
		double power(double base,int exponent)
		{
			if(equal(base,0.0)) return 0.0;
			int absExponent=fabs(exponent);
			double result = PowerWithAbsExponent(base,absExponent);
			if(exponent < 0) result = 1.0 / result;
			return result;
		}
	private:
		bool equal(double num1,double num2)
		{
			if(fabs(num1-num2) < 1.0e-7)
				return true;
			else return false;
		}
		double PowerWithAbsExponent(double base,int absExponent)
		{
			double result=1;
			double dou_base=base*base;
			if(absExponent==0) result=1;
			if(absExponent==1) result=base;
			if(absExponent%2==0) 
			{
				for(int i=1;i<=absExponent/2;i++)
					result*=dou_base;
			}
			else
			{
				for(int i=1;i<=absExponent/2;i++)
					result*=dou_base;
				result*=base;
			}
			return result;
		}
};
int main()
{
	int n,exponent;
	double base;
	solution stu;
	cout<<"请输入double类型的浮点数base\n";
	cin>>base;
	cout<<"请输入int类型的整数exponent\n";
	cin>>exponent;
	cout<<"base的exponent次方为:\n";
	double result=stu.power(base,exponent);
	cout<<result;
}

 

举报

相关推荐

0 条评论