剑指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\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
****************************************************************/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP在线

PHP生成随机密码的4种方法及性能对比

方法一: 1、在 33 – 126 中生成一个随机整数,如 35, 2、将 35 转换成对应的ASCII码字符,如 35 对应 # 3、重复以上 1、2 步骤 ...

32260
来自专栏desperate633

LintCode 数字三角形题目分析1 (常规的动态规划解法)分析2 (如果你只用额外空间复杂度O(n)的条件)

给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。 ** 注意事项 如果你只用额外空间复杂度O(n)的条件下完成可以获...

10320
来自专栏iOS 开发杂谈

为什么数组都是从0开始编号

为什么数组都是从 0 开始编号,首先先了解一下数组的概念。 数组 Array 是一种线性表数据结构,是一组连续的内存空间,用来存储一组具有相同类型的数据。数组...

30930
来自专栏个人分享

调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相...

13830
来自专栏林德熙的博客

win10 uwp 初始屏幕

对于本地 127.0.0.1 就是一个内部IP,之外,还有10.0.0.0/24 ,172.16.0.0/16 , 192.168.0.0/16 , 169.2...

10520
来自专栏WD学习记录

牛客网 和为S的两个数字

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。

19240
来自专栏林德熙的博客

win10 uwp 判断本地ip

对于本地 127.0.0.1 就是一个内部IP,之外,还有10.0.0.0/24 ,172.16.0.0/16 , 192.168.0.0/16 , 169.2...

13510
来自专栏Fish

CUDA PTX ISA阅读笔记(二)

8. 第八章 指令集 这一章占了整个手册的一大半(百十来页吧),主要介绍各种指令,虽然页数很多,但是大多数指令都很简单。 8.1. 指令的形式和语义描述 这章就...

57950
来自专栏书山有路勤为径

生成括号

已知n组括号,开发一个程序,生成这n组括号所有的合法的组合可能例如:n = 3 结果为:["((())) "," (()())","()(()) "," ()...

8610
来自专栏Python爬虫与数据挖掘

浅谈网络爬虫中广度优先算法和代码实现

前几天给大家分享了网络爬虫中深度优先算法的介绍及其代码实现过程,没来得及上车的小伙伴们可以戳这篇文章——浅谈网络爬虫中深度优先算法和简单代码实现。今天小编给大家...

15250

扫码关注云+社区

领取腾讯云代金券