1514:数値の整数次数@jobdu

1922 ワード

タイトル1514:数値の整数次数
時間制限:1秒
メモリ制限:128メガ
特殊問題:いいえ
コミット:377
解決:103
タイトルの説明:
doubleタイプの浮動小数点数baseとintタイプの整数exponentを指定します.baseのexponent次数を求めます.
入力:
入力には、複数のテストサンプルが含まれる場合があります.各入力ファイルについて、最初の行にはテストケースの数を表す整数Tが入力され、次のT行には浮動小数点数baseと整数exponentが入力され、2つの数の間に1つのスペースで区切られています.
出力:
各テストケースに対応して、浮動小数点数を出力して答えを表し、小数点数を2桁保持すればよい.
サンプル入力:
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

ヒント:
特に、異なるコンパイラが科学カウント法フォーマット出力における指数ビット数の違いに注意してください.9度Online Judgeで使用するコンパイル環境を推奨します.
最後のグループのデータがなぜか通らないので、記録をめくってみると、Javaで作ったACが1つもないことに気づき、時間を無駄にしなくなった.
C++バージョンの参照可能な2つ:アルゴリズムは同じです
http://blog.csdn.net/SunnyYoona/article/details/14646053
http://blog.csdn.net/arcsinsin/article/details/12917119
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class S11 {

	public static void main(String[] args) throws FileNotFoundException {
		BufferedInputStream in = new BufferedInputStream(new FileInputStream("in.in"));
		System.setIn(in);
		Scanner cin = new Scanner(System.in);
		
		while (cin.hasNextInt()) {
			long n = cin.nextInt();
			for(int i=0; i<n; i++){
				double ret = power(cin.nextDouble(), cin.nextInt());
				if(ret != Double.POSITIVE_INFINITY){
					System.out.println(String.format("%.2ef", ret));
				}else{
					System.out.println("INF");
				}
			}
		}
	}
	
	public static double power(double base, int n){
		if(n == 0){
			return 1;
		}
		if(n == 1){
			return base;
		}
		if(n < 1){
			return 1.0/power(base, -n);
		}
		if((n & 1) == 1){		// odd
			double tmp = power(base, (n-1)>>1);
			return tmp * tmp * base;
		}else{
			double tmp = power(base, n>>1);
			return tmp * tmp;
		}
	}
}