Problem:
博士が愛した２進数

「君の靴のサイズはいくつかね」

初対面の私に、いきなり博士は尋ねました。

「 23.5 です」

「ほお、実にきりのいい数字だ。2 の 4 乗に 2 の 2 乗と 2 の 1 乗と 2 の 0 乗と 2 の -1 乗を 加えた数だ」

続けて博士は尋ねました。

「君、身長はいくつかね」

「はい、158.1 です」

博士は腕組みをして目を閉じました。しばらくの沈黙の後、口を開きました。

「ナァ~」

その後一緒に過ごした時間の中で、博士の行動がだんだん理解できるようになりました。

まず、 私が博士の求めに応じて実数を言います。実数が整数部 8 桁以内で小数部 4 桁以内の 2 進数で表される場合、博士は 2 進数への変換結果を満足げに語ります。そうでない場合、悲しげに「ナァ~」 と鳴きます。これは、私が負の実数を言うまで繰り返されるのです。

さて、博士は年齢とともにだんだんに長い計算が難しくなってきました。そこで、みなさんが博士に代わって、実数を入力し 2 進数に変換・出力するプログラムを作ってあげてください。ただし、2 進表現が制限桁数 (整数部 8 桁以内 + 小数部 4 桁以内) に収まらない場合は、NA (半角英字) を出力してください。入力される実数は整数部 8 桁以内、小数部 4 桁以内に収まるものとし、出力する 2 進表現は整数部 8 桁、小数部 4 桁で出力してください。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりは負の実数ひとつの行で示されます。
各データセットとして１つの実数 n が１行に与えられます。

データセットの数は 1200 を超えません。

Output

入力データセットごとに 2 進数への変換結果を出力します。

Sample Input

23.5
158.1
-1.0

Output for the Sample Input

00010111.1000
NA

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace Test1 {

    


    class ClassMain {

       

        public static void Main(String[] args) {
            string line;
            while ((line = Console.ReadLine()) != null) {
                if (double.Parse(line) < 0) { break; }
                string[] strs = line.Split('.');

                if (strs.Length < 2) { strs = new string[] { strs[0], "0" }; }
                while (strs[1].Length < 4) { strs[1] += "0"; }

                bool[] digits = new bool[4];
                int syousuu = int.Parse(strs[1]);
                if (syousuu / 5000 > 0) { 
                    digits[0] = true;
                    syousuu %= 5000;
                }
                if (syousuu / 2500 > 0) {
                    digits[1] = true;
                    syousuu %= 2500;
                }
                if (syousuu / 1250 > 0) {
                    digits[2] = true;
                    syousuu %= 1250;
                }
                if (syousuu / 625 > 0) {
                    digits[3] = true;
                    syousuu %= 625;
                }
                if (syousuu > 0) { Console.WriteLine("NA"); continue; }

                int seisuu = int.Parse(strs[0]);
                bool[] seidigits = new bool[8];
                int basem = 2*2*2*2* 2*2*2;
                if (seisuu > basem*2-1) { Console.WriteLine("NA"); continue; }
                for (int i = 0; i < 8; i++) {
                    if (seisuu / basem > 0) {
                        seidigits[i] = true;
                        seisuu %= basem;
                    }
                    basem /= 2;
                }
                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < 8; i++) {
                    if (seidigits[i]) { sb.Append("1"); }
                    else { sb.Append("0"); }
                }
                sb.Append(".");
                for (int i = 0; i < 4; i++) {
                    if (digits[i]) { sb.Append("1"); }
                    else { sb.Append("0"); }
                }
                Console.WriteLine(sb.ToString());
            }
        }

        
    }



    
}