剑指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;
}



目录
相关文章
|
10天前
求一个整数的所有因数
【10月更文挑战第25天】求一个整数的所有因数。
11 5
【剑指offer】-数值的整数次方-12/67
【剑指offer】-数值的整数次方-12/67
|
算法 C++
剑指offer(C++)-JZ16:数值的整数次方(算法-位运算)
剑指offer(C++)-JZ16:数值的整数次方(算法-位运算)
|
算法
剑指Offer - 面试题16:数值的整数次方
剑指Offer - 面试题16:数值的整数次方
55 0
剑指offer 15. 数值的整数次方
剑指offer 15. 数值的整数次方
51 0
【剑指offer】二进制中1的个数&&2的幂
【剑指offer】二进制中1的个数&&2的幂
【剑指offer】二进制中1的个数&&2的幂
35.数值的整数次方
给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方
50 0
35.数值的整数次方
求实数的整数次幂(循环版)(高效)(位运算解题)
说明:参数 x 为底数,n 为指数。若参数正确,则函数值为 x 的 n 次幂。若参数不正确(当底数为 0 且指数为 0 或负数时无意义),则报告错误,函数值为0。// 这个位运算是大部分都不熟悉也不敢用的东西,但是确实是编程里面的一个非常重要的工具。请编写函数,用循环语句以最快的方法求任意实数的任意整数次幂。要求:不得调用 pow 函数,不得使用递归方法。指数 二进制 公式。
206 0
求实数的整数次幂(循环版)(高效)(位运算解题)
|
前端开发 JavaScript 程序员
数值的整数次方
数值的整数次方
数值的整数次方
AcWing 720. 连续整数相加
AcWing 720. 连续整数相加
84 0
AcWing 720. 连续整数相加