首页 > 代码库 > NYOJ 647 奋斗的小蜗牛在请客

NYOJ 647 奋斗的小蜗牛在请客

奋斗小蜗牛在请客

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

一路艰辛一路收获,成功爬过金字塔的小蜗牛别提多高兴了。这不为了向曾经帮助他的哥们们表达谢意,蜗牛宴请这些亲朋好友。

席间,蜗牛发现老鹰一直愁眉不展。就关切的问下老鹰。老鹰说:“近来,有一道题我一直没解决,很是郁闷”。蜗牛说:“说说看,看能不能帮你解决掉,老朋友”。老鹰说:“给一个数,用二进制表达,如果这个数转化为二进制后小数位超过20位,那么只要前二十位,其余的不要”,小蜗牛现在很忙,没时间帮助老鹰。

   亲爱的兄弟姐妹们,不知道你能否帮忙解决问题。来试下,加油!!!

输入
多组测试数据,
每组输入一个数N(不超double)
输出
输出对应的二进制(如果小数部分前20全部为0,则将小数部分视为0,不输出小数部分,不输出多余部分比如:(不输出1.00100000000000000000而输出1.001)
样例输入
1
1.5
0.000001
0.000000999
样例输出
1
1.1
0.00000000000000000001
0.00000000000000000001
题不难,思绪却很乱!
AC码:
#include<stdio.h>
int main()
{
	double n;
	int i,count,num[25],m;
	while(~scanf("%lf",&n))
	{
		m=((int)n);     // 把整数部分转化为二进制
		count=0;
		do
		{
			num[count]=m%2;
			m=m/2;
			count++;
		}while(m!=0);
		for(i=count-1;i>=0;i--)
			printf("%d",num[i]); // 把整数部分转化为二进制结束
		
		count=0;          // 把小数部分转化为二进制
		for(i=0;i<25;i++)
			num[i]=0;
		n=n-((int)n);
		while(count<20&&n!=0)
		{
			n=n*2;
			if(n>=1)
			{
				num[count]=1;
				n=n-((int)n);
			}
			else
				num[count]=0;
			count++;
		}
		count--;
		while(count>=0&&num[count]==0)
			count--;
		if(count>=0)
			printf(".");
		for(i=0;i<=count;i++)
			printf("%d",num[i]);
		printf("\n");
	}
	return 0;
}