閱讀128 返回首頁    go 阿裏雲 go 技術社區[雲棲]


劍指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:數值的整數次方
*   來源:https://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:數值的整數次方
*   來源:https://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;
}



最後更新:2017-04-03 14:54:08

  上一篇:go 精通css(7)-實例
  下一篇:go 計算機體係結構7_緩存控製機製