2011年9月2日金曜日

0220

なんか、小数点の2進数変換するだけ、2年の頃に崎ねえに習った固定小数点の二進数変換が初めて役に立った。ありがとう崎ねえ



#include <stdio.h>
#include <stdlib.h>

bool itob(int b, char res[])
{

for (int i = 0; i < 8; i++){
if ((b & (1 << (8 - i - 1))) != 0){
res[i] = '1';
}
else res[i] = '0';
}
res[8] = '\0';

return ((b & (~0xff)) == 0);
}

bool ftob(double f, char res[])
{

for (int i = 0; i < 4; i++){
f *= 2;

if (f >= 1.0){
res[i] = '1';
f -= 1;
}
else {
res[i] = '0';
}
}
res[4] = '\0';

return (f == 0);
}

int main(void)
{
double n;
int b;
double m;
bool flag;
char bans[100];
char mans[100];
char ans[200];

while (1){
scanf("%lf", &n);

if (n < 0){
break;
}

flag = true;

b = (int)n;
m = n - b;

flag &= itob(b, bans);
flag &= ftob(m, mans);

sprintf(ans, "%s.%s", bans, mans);

puts(flag ? ans : "NA");
}

return (0);
}

0 件のコメント:

コメントを投稿