zoukankan      html  css  js  c++  java
  • 剑指OFFER之数值的整数次方(九度OJ1514)

    题目描述:

    给定一个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
    ");
                else
                    printf("%.2ef
    ",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
    ****************************************************************/
  • 相关阅读:
    web复制到剪切板js
    thinkphp 级联菜单实现
    一次$.getJSON不执行的记录
    php实现ppt转图片,php调用com组件问题
    模拟生成一天温度数据,精确到秒
    ffmpeg推rtmp流到crtmpserver直播
    博客新窝CSDN站
    Android开源框架Afinal第二篇——庖丁解牛,深入调查
    Android开源框架Afinal第一篇——揭开圣女的面纱
    AndroidのListView之加载说
  • 原文地址:https://www.cnblogs.com/xing901022/p/3751502.html
Copyright © 2011-2022 走看看