POJ 1131 - Octal Fractions

http://poj.org/problem?id=1131

概要

八進の小数で表現された0以上1以下の数が与えられるので,それを十進で表現したものを答える. 八進で小数点以下 n 桁の小数は多くとも小数点以下 3n 桁の十進で表現できる.

制約

解法

Java の BigDecimal に逃げた.

 1 import java.util.*;
 2 import java.math.*;
 3 
 4 public class Main {
 5   public static void main(String[] args) {
 6     Scanner cin = new Scanner(System.in);
 7     while (cin.hasNext()) {
 8       String s = cin.next();
 9       char[] cs = s.toCharArray();
10       BigDecimal n = BigDecimal.valueOf(0), eight = BigDecimal.valueOf(8);
11       BigDecimal e = BigDecimal.valueOf(1);
12       for (int i = 2; i < cs.length; i++) {
13         n = n.multiply(eight).add(BigDecimal.valueOf(cs[i] - '0'));
14         e = e.multiply(eight);
15       }
16       n = n.divide(e);
17       System.out.printf("%s [8] = %s [10]\n", s, n);
18     }
19   }
20 }
poj/1131.java