码迷,mamicode.com
首页 > 其他好文 > 详细

【剑指offer】数值的整数次方

时间:2014-07-27 11:55:23      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:

给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

输入:

输入可能包含多个测试样例。
对于每个输入文件,第一行输入一个整数T,表示测试案例的数目,接下来的T行每行输入一个浮点数base和一个整数exponent,两个数中间用一个空格隔开。

输出:

对应每个测试案例,
输出一个浮点数代表答案,保留两位小数即可。

样例输入:
5
1.0 10
0.0 -5
1.0 0
1.2 5
2.0 -1
样例输出:
1.00e+00f
INF
1.00e+00f
2.49e+00f
5.00e-01f
 要点:
1.由于计算机表示小数(包括浮点和double)都与误差,我们不能直接用等号判断两个小数是否相等,如果两个小数的差的绝对值很小,比如小于0.0000001,就可以认为他们相等。
2.本题还需考虑底数为0,指数为负数的情况。

3.递归解法较新颖。原理是:

bubuko.com,布布扣

实现:

/*
数值的整数次方
by Rowandjj
2014/7/26
*/
#include<stdio.h>
#include<math.h>
bool g_invalid_input = false;
//方案1
double PowerWithUnsignedExponent1(double base,unsigned int exponent)
{
	double result = 1.0;
	unsigned int i;
	for(i = 0; i < exponent; i++)
	{
		result *= base;
	}
	return result;
}
//方案2---->递归
double PowerWithUnsignedExponent2(double base,unsigned int exponent)
{
	if(exponent == 0)
	{
		return 1;
	}
	if(exponent == 1)
	{
		return base;
	}
	double result = PowerWithUnsignedExponent2(base,exponent>>1);
	result *= result;
	if(exponent & 0x1 == 1)//exponent%2==1,为奇数
	{
		result *= base;
	}
	return result;
}
//base^exponent
double Power(double base,int exponent)
{
	g_invalid_input = false;
	//底数为0,指数为负数
	if(fabs(base - 0.0)<0.0000001 && exponent < 0)
	{
		g_invalid_input = true;
		return 0.0;
	}
	unsigned int absExponent = (unsigned int)(exponent);
	if(exponent < 0)
	{
		absExponent = (unsigned int)(-exponent);
	}
	double result = PowerWithUnsignedExponent2(base,absExponent);
	if(exponent < 0)
	{
		result = 1.0/result;
	}
	return result;
}
int main()
{
	int n,exp;
	double base;
	while(scanf("%d",&n) != EOF)
	{
		int i;
		for(i = 0; i < n; i++)
		{
			 g_invalid_input = false;  
			scanf("%lf %d",&base,&exp);
			double result = Power(base,exp);  
            if(!g_invalid_input)  
                printf("%.2ef\n",result);  
            else  
                printf("INF\n");  
		}
	}
	return 0;
}






【剑指offer】数值的整数次方

标签:

原文地址:http://blog.csdn.net/chdjj/article/details/38147341

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!