目录
【问题描述】
将十进制浮点数转换为二进制数输出,要求如下:
1. 程序全程使用 double 型进行计算
2. 如输入的实数是负数,则打印负号,整数不打印正号
3. 若输入的浮点数不含小数部分,则不打印小数点
4. 若小数部分最多只用输出20位
【输入形式】
输入只有一个数,为待转换的数
【输出形式】
输出转换后的二进制数(不要在后面添加换行符)
【样例输入1】
666.25
【样例输出1】
1010011010.01
【代码展示】
//完整的二进制转换
#include<stdio.h>
#include<math.h>
void to_binary(int n);
void to_binarys(double n);
int main(void)
{
double number;
scanf("%lf",&number);
if (number>=0)
{
if (number-(int)number<=1e-6)
to_binary((int)number);
else
{
to_binary((int)number);
printf(".");
to_binarys(number-(int)number);
}
}
else
{
number=fabs(number);
printf("-");
if (number-(int)number<=1e-6)
to_binary((int)number);
else
{
to_binary((int)number);
printf(".");
to_binarys(number-(int)number);
}
}
return 0;
}
void to_binary(int n) //将十进制整数转换为二进制的算法
{
int r;
r=n%2;
if(n>=2)
to_binary(n/2);
putchar(r==0?'0':'1');
return;
}
void to_binarys(double n) //将十进制小数转换为二进制的算法
{
double r,m;
int k;
for(k=1;k<=20;k++)
{
r=n*2;
putchar((int)r==0?'0':'1');
m=r-(int)r;
n=m;
if ((n-0)<=1e-6)
break;
}
return;
}
【代码解释】
本代码主要实现了将十进制的一个double类型的浮点数转换为二进制。
其中,使用了两个函数,分别实现对于该浮点数整数,小数部分的转换,在主程序中依次调用这两个函数,对输入的浮点数进行处理,得到结果。