zoukankan      html  css  js  c++  java
  • 【剑指offer】数值的整数次方

    版权声明:本文为博主原创文章,未经博主同意不得转载。

    https://blog.csdn.net/mmc_maodun/article/details/25506085

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/25506085


        剑指offer上的第十一题,九度OJ上測试通过。

    题目描写叙述:

    给定一个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所使用的编译环境。

        这里採用递归求次方的方法来写代码,思路例如以下:




        AC代码例如以下:

    #include<stdio.h>
    #include<math.h>
    #include<stdbool.h>
    
    bool flag = true;
    
    //求base的正数absExp次幂
    double PowerAbs(double base,unsigned int absExp)
    {
    	//递归退出的条件
    	if(absExp == 0)
    		return 1.0;
    	if(absExp == 1)
    		return base;
    	
    	//递归求次方
    	double result = PowerAbs(base,absExp>>1);
    		result *= result;
    	//推断奇偶性
    	if(absExp&1 == 1)
    		result *= base;
    
    	return result; 
    }
    
    //求base的exp次方
    double Power(double base,int exp)
    {
    	//底数为0。指数为负数的情况
    	if(fabs(base-0.0)<0.0000001 && exp<=0)
    	{
    		flag = false;
    		return 0.0;
    	}
    
    	unsigned int absExp = (unsigned int)abs(exp);
    	double result = PowerAbs(base,absExp);
    	if(exp<0)
    		result = 1.0/result;
    
    	return result;
    }
    
    int main()
    {
    	int n,exp;
    	double base;
    	while(scanf("%d",&n) != EOF)
    	{
    		int i;
    		for(i=0;i<n;i++)
    		{
    			//每次都要先将flag置为true
    			flag = true;
    			scanf("%lf %d",&base,&exp);
    			double result = Power(base,exp);
    			if(flag)
    				printf("%.2ef
    ",result);
    			else
    				printf("INF
    ");
    		}
    	}
    	return 0;
    }
    /**************************************************************
        Problem: 1514
        User: mmc_maodun
        Language: C
        Result: Accepted
        Time:80 ms
        Memory:912 kb
    ****************************************************************/


  • 相关阅读:
    Android Studio同时监听多个Button实现activity跳转
    Android Studio--Activity实现跳转功能
    Gym 101170F Free Weights(二分)题解
    Gym 101170I Iron and Coal(BFS + 思维)题解
    Gym 101128F Landscaping(网络流)题解
    Gym 101128A Promotions(思维 + dfs)题解
    Gym 101480I Ice Igloos(思维乱搞)题解
    Gym 101480F Frightful Formula(待定系数)题解
    Gym 101128J Saint John Festival(凸包 + 二分判点和凸包关系)题解
    CodeForces 348D Turtles(LGV定理)题解
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10522302.html
Copyright © 2011-2022 走看看