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

数值的整数次方

时间:2015-03-04 12:58:32      阅读:125      评论: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.当指数是负数的时候,可以先对指数求绝对值,然后算出次方的结果之后求倒数。

2.当底数是0,指数是负数的时候应做特殊处理。

3.判断两个浮点数是否相等不应该直接用==。

#include<cstdio>
#include<cstring>
#include<cstdlib>

bool g_InvalidInput = false;

bool equal(double num1,double num2)
{
    if((num1 - num2 >= -0.0000001) && (num1 - num2 <= 0.0000001))
    {
        return true;
    }
    return false;
}

double PowerWithUnsignedExponent(double base,unsigned int exponent)
{
    if(exponent == 0) return 1;
    if(exponent == 1) return base;
    double result = PowerWithUnsignedExponent(base,exponent>>1);
    result *= result;
    if(exponent & 0x1 == 1)
        result *= base;
    return result;
}


double Power(double base,int exponent)
{
    g_InvalidInput = false;
    if(equal(base,0.0) && exponent < 0)
    {
        g_InvalidInput = true;
        return 0.0;
    }
    unsigned int absExponent = (unsigned int)exponent;
    if(exponent < 0)
        absExponent = (unsigned int)(-exponent);
    double result = PowerWithUnsignedExponent(base,absExponent);
    if(exponent < 0)
        result = 1.0 / result;
    return result;
}

int main()
{
    int n;
    scanf("%d",&n);
    double base;
    int exponent;
    while(n--)
    {
        scanf("%lf%d",&base,&exponent);
        double result = Power(base,exponent);
        if(g_InvalidInput)
            printf("INF\n");
        else
        {
            printf("%.2ef\n",result);
        }
    }
    return 0;
}



数值的整数次方

标签:

原文地址:http://blog.csdn.net/biluyang/article/details/44058079

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