博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求一个数的整数次方
阅读量:4324 次
发布时间:2019-06-06

本文共 1319 字,大约阅读时间需要 4 分钟。

题目:求一个数的整数次方。

题目是如此的简单,但是需要考虑的还是比较多:

1.指数为负,底数是零;

2.指数底数都是零;

3.返回正常零和返回错误零的区别;

4.底数为正,指数为负如何处理;

5.考虑底数次方大的话,想效率问题;

6.处理double数值相等问题;

以下直接是代码,详细考虑除底数指数全零的以上所有情况!

#pragma once/**base是底数 exponent是指数*/bool g_Input = false;                     //错误时,返回零,和正常返回零区别double Power(double base, int exponent){	g_Input = false;	if (equal(base, 0.0) && exponent < 0) //底数为零,指数为负,即考虑分母为零	{		g_Input = true;		return 0.0;	}	unsigned int absExponent = (unsigned int)(exponent);	if (exponent < 0)        //如果指数为负,先换成正的处理		absExponent = (unsigned int)(-exponent);	double result = PowerWithUnsingnedExponent(base, absExponent);  //最终结果	if (exponent < 0)        //如果指数为负,结果就是正数的倒数		result = 1.0 / result;	return result;}//将一个数的次方拆分,2为拆分单元 提高效率double PowerWithUnsingnedExponent(double base, unsigned int exponent){	if (exponent == 0)    //两个递归出口		return 1;	if (exponent == 1)		return base;	double result = PowerWithUnsingnedExponent(base,exponent>>1); //右移1 表示 除2	result *= result;	if (exponent & 0x1 == 1)   //判断奇数偶数		result *= base;	return result;}//两个double数是否相等,不能用绝对的相等来写,两个double数满足如下,就判相等bool equal(double num1, double num2){	if ((num1 - num2 > -0.0000001) && (num1 - num2 < 0.0000001))		return true;	else		return false;}void Test(){	//PowerWithUnsingnedExponent(2,3);	Power(2,3);}
赐教!

转载于:https://www.cnblogs.com/melons/p/5791814.html

你可能感兴趣的文章
web-4. 装饰页面的图像
查看>>
微信测试账户
查看>>
Android ListView上拉获取下一页
查看>>
算法练习题
查看>>
学习使用Django一 安装虚拟环境
查看>>
Hibernate视频学习笔记(8)Lazy策略
查看>>
CSS3 结构性伪类选择器(1)
查看>>
IOS 杂笔-14(被人遗忘的owner)
查看>>
自动测试用工具
查看>>
前端基础之BOM和DOM
查看>>
[T-ARA/筷子兄弟][Little Apple]
查看>>
编译Libgdiplus遇到的问题
查看>>
【NOIP 模拟赛】Evensgn 剪树枝 树形dp
查看>>
java学习笔记④MySql数据库--01/02 database table 数据的增删改
查看>>
两台电脑如何实现共享文件
查看>>
组合模式Composite
查看>>
程序员最想得到的十大证件,你最想得到哪个?
查看>>
我的第一篇CBBLOGS博客
查看>>
【MyBean调试笔记】接口的使用和清理
查看>>
07 js自定义函数
查看>>