Problem 0220 : Binary Digit A Doctor Loved

問題概要

与えられた実数が、整数部8桁以下かつ小数部4桁以下の2進数で表されるならばそれを、
そうでなければNAを出力せよ。

解法

2進数は0詰めで表記されるので、実数の大きさにかかわらず12回ループを回して、2進数に変換してやればよい。
12回計算した後、余りがあればNA.

ソースコード

double d;
int main()
{
	while(scanf("%lf",&d),d>=0)
	{
		if(d>=256)
		{
			puts("NA"); continue;
		}
		rep(i,7)d/=2;
		int a[12]={0};
		rep(i,12)
		{
			if(d>=1)a[i]=1,d-=1;
			d*=2;
		}
		if(d!=0)puts("NA");
		else
		{
			rep(i,8)printf("%d",a[i]);
			putchar('.');
			rep(i,4)printf("%d",a[i+8]);
			puts("");
		}
	}
	return 0;
}