수치의 정수 제곱

제목: 함수 double Power (double base, int exponent) 를 실현 하고 base 의 exponent 를 구 합 니 다.라 이브 러 리 함 수 를 사용 할 수 없 으 며, 동시에 대수 문 제 를 고려 할 필요 가 없다.
제목 링크:http://ac.jobdu.com/problem.php?pid=1514
이 문 제 는 다음 과 같은 몇 가지 주의 가 필요 하 다.
0 의 0 제곱 은 무의미 하고 불법 입력 0 의 음수 제곱 은 0 을 나 누 는 것 과 같 고 무의미 하 며 불법 입력 베이스 가 0 이 아니라면 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수 지수
double 형식의 base 가 0 과 같 는 지 여 부 를 판단 합 니 다.컴퓨터 표현 트 리 (float 와 double 형 소수 포함) 에 오차 가 있 기 때문에 등호 (= =) 를 직접 사용 하여 두 소수 가 같 는 지 판단 할 수 없습니다.만약 두 수의 차 이 는 절대 치가 매우 작다 면, 두 개의 double 유형의 수 는 같다 고 볼 수 있다.
상기 네 가지 주의 점 에 따라 우 리 는 지 수 를 구 하 는 프로그램, 코드 를 쓸 수 있다.
#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;

bool g_Invalid = false;
//         (float,double)    ,       (==)          
//                ,    0.0000001,           
bool equal(double num1, double num2)
{
	if ((num1 - num2) > -0.000001 && (num1 - num2) < 0.000001)
		return true;
	else 
		return false;
}
//    exp >=0 
double PowerExp(double base, unsigned int exp)
{
	if (exp == 0)
		return 1;
	if (exp == 1)
		return base;

	double res = PowerExp(base,exp>>1);
	res *= res;

	if (exp &0x1 == 1)
		res *= base;

	return res;
}

double Power(double base, double exp)
{
	g_Invalid = false;
	
	//0 0   0           
	if (equal(base,0.0) && exp <= 0)
	{
		g_Invalid = true;
		return 0.0;
	}
	//       
	unsigned int absExp;
	if (exp < 0)
		absExp = (unsigned int)(-exp);
	else 
		absExp = (unsigned int)(exp);
	
	double res = PowerExp(base,absExp);
	
	//    0,    
	if (exp < 0)
		res = 1.0/res;

	return res;

}
int main()
{
	int t, exp;
	double base, res;
	while (scanf("%d",&t) == 1)
	{
		for (int i = 0; i < t; i++)
		{
			scanf("%lf %d",&base,&exp);
			res = Power(base,exp);
			//      ,  INF
			if (g_Invalid )
			{
				printf("INF
"); continue; } // , else printf("%.2ef
",res); } } return 0; }
이 문 제 는 반드시 자세하게 써 야 다 쓸 수 있다.

좋은 웹페이지 즐겨찾기