032数值的整数次方(keep it up)

剑指offer中题目:http://ac.jobdu.com/problem.php?

pid=1514

题目描写叙述:

给定一个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

这个题wrong了几次,就是由于abs和fabs晕了。

。。。

代码:

#include <stdio.h>
#include <math.h>

#define PRECISION 0.00000001

double powN(double vBase, int vN)
{
	double Result = 1.0;

	while (vN)
	{
		if (vN%2)
		{
			Result *= vBase;
			--vN;
		}
		else
		{
			vBase *= vBase;
			vN >>= 1;
		}
	}

	return Result;
}

double getBaseExp(double vBase, int vExp)
{
	int N = abs(vExp);
	double Result = powN(vBase, N);

	if (vExp < 0)
	{
		return 1.0 / Result;
	}
	else if (vExp == 0)
	{
		return 1.0;
	}

	return Result;
}

int main()
{
	int N;
	int Exp;
	double Base;

	scanf("%d", &N);
	while (N--)
	{
		scanf("%lf %d", &Base, &Exp);

		//if (abs(Base) < PRECISION && Exp < 0)//这样就错了
		//{
		//	//printf("error\n");
		//	printf("INF\n");
		//	continue;
		//}

		if (fabs(Base) < PRECISION && Exp < 0)
		{
			printf("INF\n");
			continue;
		}

		double Result = getBaseExp(Base, Exp);
		printf("%.2ef\n", Result);
	}
	return 0;
}
时间: 2024-10-12 18:40:27

032数值的整数次方(keep it up)的相关文章

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

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25506085 剑指offer上的第十一题,九度OJ上测试通过. 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 输入: 输入可能包含多个测试样例.对于每个输入文件,第一行输入一个整数T,表示测试案例的数目,接下来的T行每行输入一个浮点数base和一个整数exponent,两个数中间用一个空格隔开. 输出: 对应每

数值的整数次方-剑指Offer

数值的整数次方 题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路 主要有几点需要注意 由于计算机表示小数(float和double)都有误差,不能直接用等号(==)判断两个小数是否相等.若两个小数的差的绝对值很小,比如小于0.0000001,就可以认为它们相等 注意考虑输入值得全面性,正负可能,而且0的负数次幂没意义. 代码 解法一: public class Solution { public double Powe

《剑指Offer》题目:数值的整数次方

题目描述:数值的整数次方给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 题目分析:题目的关键在于要考虑exponent为负数的情况. Java代码: public class Power { public static double power(double base, int exponent) { double res = 1.0; if(exponent == 0){ return 1.0; } if(exponent > 0

[剑指offer]Q11:数值的整数次方

pow(base, exponent) 考虑一下几种情况: base = 0, 那么直接返回0 base = 1, 那么直接返回1 exponent = 0, 那么直接返回1, 注意base= 0 exponent = 1, 那么直接返回 base exponent  为正为负 的情况 主要考察的点是将问题缩减,用折半的思想.这个题细节还是很多的,为了便于验证,leetcode上恰好有这个题,建议在线AC一下. def equal(self, a, b): return abs(a - b) <

数值的整数次方(C++ 和 Python 实现)

(说明:本博客中的题目.题目详细说明及参考代码均摘自 "何海涛<剑指Offer:名企面试官精讲典型编程题>2012年") 题目 实现函数 double Power(double base, int exponent),求 base 的 exponent 次方.不得使用库函数,同时不需要考虑大数问题. 算法设计思想 无论是简单直接方法,还是高效的方法,都需要首先全面考虑 base 和 exponent 的可能的输入:正数.负数和 0.实现的基本思想是把数值的整数次方,转化为数

c++实现数值的整数次方(类似pow())作用

/* * 计算数值的整数次方.cpp * * Created on: 2018年4月13日 * Author: soyo */ #include<iostream> #include<math.h> #include<ctime> using namespace std; int main() { double power(double base,int exp); int x=2,y=3; long int z; z=pow(2,3); cout<<&qu

剑指Offer--第16题 数值的整数次方

第16题 数值的整数次方 题目:给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 思路 看到有点懵,第一感觉觉得是不是应该考虑0的0次或者负数情况,还有就是浮点类型没办法使用"="号,最后自己以偷懒的方式直接调用Java的API,如果面试题中不让调用库函数,那么基本上这题就是挂了可能. 以上题目描述来自牛客,没有对使用做限制.真正的剑指offer上有限制条件不得使用库函数,同时不需要考虑大数问题. 自己的low代码 publ

面试题16:数值的整数次方

// 面试题16:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需要考虑大数问题. 解题思路: 解题并不难,重要的是要考虑到输入的各种情况,并且有相应的处理. double和int都是可以取负数和0的,如果base取0,exponent<0,结果显然是不存在的. base取0,exponent取非负,直接返回1就可以了. 其他情况,正常运算就好,要注意如果expo

《剑指offer》第十六题(数值的整数次方)

// 面试题:数值的整数次方 // 题目:实现函数double Power(double base, int exponent),求base的exponent // 次方.不得使用库函数,同时不需要考虑大数问题. #include <iostream> #include <cmath> using namespace std; bool g_InvalidInput = false;//使用全局变量作为错误处理方式 bool equal(double num1, double nu