AOJ : 0220 - Binary Digit A Doctor Loved
アルゴリズム
整数部の基数変換は, JavaのInteger.toString()を使えば一発なので, それを利用しました.
この変換後の文字列が, 9ケタ以上ならば, 必然的にNAです.
小数部の基数変換は, Javaのライブラリにもないため, 普通の計算の仕方で2進数に変換しました.
この変換途中で5ケタ以上になるようならば, これもNAです.
最後に整数部を8ケタになるように, 小数部を4ケタになるように, 0を連結させて, 出力しました.
プログラム
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(true){ double x = sc.nextDouble(); if(x == -1) break; int left = (int)x; String leftS = Integer.toString(left,2); if(leftS.length() > 8){ System.out.println("NA"); continue; } double right = x % 1; String rightS = ""; int rem = 4; while(rem-- > 0 && right != 0){ right *= 2; rightS += (int)right; right %= 1; } if(right != 0){ System.out.println("NA"); continue; } while(leftS.length() != 8) leftS = "0" + leftS; while(rightS.length() != 4) rightS += "0"; System.out.println(leftS + "." + rightS); } } }