剑指Offer之数值的整数次方

简介:

题目描述:

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

 请特别注意不同的编译器对于科学计数法格式输出中指数位数的差别。建议使用九度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;
}



目录
相关文章
人工智能 缓存 前端开发
8577 32
人工智能 JavaScript 开发工具
3603 8
开发工具 Swift git
1362 2
缓存 JavaScript Shell
1677 2
Shell API 调度
922 3
人工智能 JavaScript 测试技术
1080 0
安全 机器人 API
716 2
|
16天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
1909 13
|
15天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
2192 121
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考