剑指offer系列源码-数值的整数次方

题目1514:数值的整数次方
时间限制:1 秒内存限制:128 兆特殊判题:否提交:1549解决:425
题目描述:
给定一个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

#include<iostream>
#include<stdio.h>
#include <memory.h>
#include <math.h>
#include <stdlib.h>
using namespace std;

double PowerWithUnsignedExponent (double base, unsigned int exponent){
    if (exponent == 0)
        return 1.0;
    if (exponent == 1)
        return base;
    double ans = PowerWithUnsignedExponent (base, exponent >> 1);
    ans *= ans;
    if (exponent & 0x01 == 1){
        ans *= base;
    }
    return ans;
}
double power(double base,int exp){
    if(base ==0||(base==0&&exp>0)){
        return 0.0;
    }
    unsigned int absExp = (unsigned int)abs (exp);
    if(exp<0){
        absExp = (unsigned int)(-exp);
    }
    double result = PowerWithUnsignedExponent(base,absExp);
    if(exp<0){
        result = 1.0/result;
    }
    return result;
}


int main(){
    int n,exp;
    double base;
    scanf("%d",&n);
    while(n--){
        scanf("%lf%d",&base,&exp);
        double ans = power(base,exp);
        if (ans != 0.0)
                printf ("%.2ef\n", ans);
            else if (base == 0.0 && exp >= 0)
                printf ("%.2ef\n", 0.0);
            else
                printf ("INF\n");
    }
    return 0;
}

oj地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值