1128: 【基础】二进制小数
时间限制: 1 Sec 内存限制: 16 MB
提交: 1605 解决: 1179
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述
在十进制和二进制的转换中,不仅仅有整数部分的转换也有小数部分的转换。只不过,转换的方法不同,整数转换是除二取余再将所有余数倒置。而小数部分转换,是将10进制的小数部分不断乘2取整数部分完成的。但,很多情况下,转换后,小数部分是不能够被精确转换的,这就要精确到第多少位。请编写程序,将输入文件中的实数转换成二进制,并显示小数点后指定位上的数值。
输入
有一个十进制实数n和一个整数m
输出
只有一个一位数整数。表示实数n转换成二进制后,小数点后第m位上的整数。
样例输入
10.123 5
样例输出
1
来源/分类
2008海淀区模拟题
题解如下
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
double n;
int m;
scanf("%lf%d",&n,&m);
int zhi=(int)n;
double decimals=n-zhi;
int ar[m];
for(int i=0;i<m;i++)
{
if(decimals*2>1)
{
ar[i]=1;
(decimals*=2)-=1;
}
else
{
ar[i]=0;
decimals*=2;
}
}
printf("%d",ar[m-1]);
return 0;
}