剑指Offer之数值的整数次方

来源:互联网 发布:ubuntu 16.04设置分区 编辑:程序博客网 时间:2024/05/16 15:16

题目描述:

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

输入:

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

输出:

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

样例输入:
51.0 100.0 -51.0 01.2 52.0 -1
样例输出:
1.00e+00fINF1.00e+00f2.49e+00f5.00e-01f
提示:

 请特别注意不同的编译器对于科学计数法格式输出中指数位数的差别。建议使用九度Online Judge所使用的编译环境。


/**********************************   日期:2013-11-9*   作者:SJF0115*   题号: 题目1514:数值的整数次方*   来源:http://ac.jobdu.com/problem.php?pid=1514*   结果:AC*   来源:剑指Offer*   总结:**********************************/#include<iostream>#include<stdio.h>#include<string>using namespace std;int flag = 1;//判断double类型数据是否相等int equal(double n,double m){    if((n - m) > -0.0000001 && (n - m) < 0.0000001){        return 1;    }    else{        return 0;    }}double Power(double n,int exponent){    int i;    double result = 1.0;    //0^负数次方    if(equal(n,0.0) && exponent < 0){        flag = 0;        return 0.0;    }    else{        flag = 1;        int absExponent = exponent;        if(exponent < 0){            absExponent = - exponent;        }        for(i = 0;i < absExponent;i++){            result *= n;        }        if(exponent < 0){            result = 1.0 / result;        }        return result;    }}int main(){int i,n,num,exponent;double base;while(scanf("%d",&n) != EOF){        for(i = 0;i < n;i++){            scanf("%lf %d",&base,&exponent);            double result = Power(base,exponent);            if(flag == 0){                printf("INF\n");            }            else{                printf("%.2ef\n",result);            }        }}    return 0;}





【另一种方法】





/**********************************   日期:2013-11-9*   作者:SJF0115*   题号: 题目1514:数值的整数次方*   来源:http://ac.jobdu.com/problem.php?pid=1514*   结果:AC*   来源:剑指Offer*   总结:**********************************/#include<iostream>#include<stdio.h>#include<string>using namespace std;int flag = 1;//判断double类型数据是否相等int equal(double n,double m){    if((n - m) > -0.0000001 && (n - m) < 0.0000001){        return 1;    }    else{        return 0;    }}double PowerOfPositive(double base,int exponent){    if(exponent == 0){        return 1;    }    else if(exponent == 1){        return base;    }    else{        //右移一位相等于除以2        double result = PowerOfPositive(base,exponent >> 1);        result *= result;        //判断奇偶性        if(exponent & 0x1 == 1){            result *= base;        }        return result;    }}double Power(double n,int exponent){    int i;    double result = 1.0;    //0^负数次方    if(equal(n,0.0) && exponent < 0){        flag = 0;        return 0.0;    }    else{        flag = 1;        int absExponent = exponent;        if(exponent < 0){            absExponent = - exponent;        }        result = PowerOfPositive(n,absExponent);        if(exponent < 0){            result = 1.0 / result;        }        return result;    }}int main(){int i,n,num,exponent;double base;while(scanf("%d",&n) != EOF){        for(i = 0;i < n;i++){            scanf("%lf %d",&base,&exponent);            double result = Power(base,exponent);            if(flag == 0){                printf("INF\n");            }            else{                printf("%.2ef\n",result);            }        }}    return 0;}



原创粉丝点击