前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指OFFER之数值的整数次方(九度OJ1514)

剑指OFFER之数值的整数次方(九度OJ1514)

作者头像
用户1154259
发布2018-01-17 19:18:47
5000
发布2018-01-17 19:18:47
举报

题目描述:

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

解题思路:

  这道题看似简单,其实BUG重重。要注意的问题:

  1 输入double类型的时候要用%lf

  2 关于次幂的问题特殊的情况,比如次幂为负数,或者基数为0时等等复杂的情况

  3 机器中浮点数的比较是由误差的,因此double类型的比较,不能用简单的a==0来比较。一般的比较方式是,相减的差在一个很小的区间内,我们就认为是相等的。方法如下:

(float1- float2 > -0.0000001) && (float1 -float2 < 0.0000001)

  4 机器输出的格式:

%e用于输出 3.071e+002这种格式的

%.2e 用于输出3.07e+002

%.2ef用于输出3.07e+002f

  这样,基本的问题就都解决了。

代码:

#include <stdio.h>
double test(double b,int e);
int flag=0;
int main(void){
    int n,exp;
    double base;
    while(scanf("%d",&n) != EOF && n>=0){
        while(n--){
            flag = 0;
            scanf("%lf %d",&base,&exp);
            double result = test(base,exp);
            if(!result && flag)
                printf("INF\n");
            else
                printf("%.2ef\n",result);
        }
    }
}
double test(double b,int e){
    double base = b;
    if(e<0){
        e = -e;
        flag = 1;
    }
    if(e == 0)
        return 1;
    while(--e)
            b *= base;
    if(flag){
        if((base - 0.0 > -0.0000001) && (base -0.0 < 0.0000001))
            return 0;
        return 1.0/b;
    }
    else
        return b;
}
/**************************************************************
    Problem: 1514
    User: xhalo
    Language: C
    Result: Accepted
    Time:80 ms
    Memory:912 kb
****************************************************************/
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-05-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 输入:
  • 输出:
  • 样例输入:
  • 样例输出:
  • 解题思路:
  • 代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档