1131:Octal Fractions

keyword

n進数 任意精度浮動小数 Java

概要

8進数の小数が与えられるので10進数の小数に変換して出力する問題。
JavaBigDecimalを活用する。入力文字列を8進数として解釈するコンストラクタはBigDecimalに無いのでいったんBigIntegerに変換してから元に戻す。

import java.util.*;
import java.math.*;

class Main {

	public static void main(String args[]){
		Scanner in = new Scanner(System.in);
		while(in.hasNextLine()){
			String inp = in.nextLine();
			String sub = "";
			for(int i=0; i<inp.length(); i++)
				if('1'<=inp.charAt(i)&& inp.charAt(i)<='9'){
					sub = inp.substring(i);
					break;
				}
			BigInteger n = new BigInteger(sub, 8);
			BigDecimal x = new BigDecimal(n,0);
			x = x.divide((new BigDecimal("8")).pow(inp.length()-2));
			System.out.println(inp + " [8] = " + x.toPlainString() + " [10]");
		}
	}
}