码迷,mamicode.com
首页 > 其他好文 > 详细

nyoj-647-奋斗小蜗牛在请客(进制转换)

时间:2015-07-05 11:04:54      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

奋斗小蜗牛在请客

时间限制: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

解题思路:

        可以将小数分为整数和小数两部分,然后分别转换成二进制,整数小数都要用数组来存储转换信息,避免越界。

        整数转换为二进制用到的是辗转取余法,而小数转换为二进制用到的是相乘取整法。

        求小数的整数和小数部分,用(int)求得其整数部分,然后本值减去整数部分即为小数部分。

       注意小数点的输出条件

代码

#include<stdio.h>
#include<string.h>
int zheng[10000];
int xiao[25];
int main()
{
	int i;
	double x;
	int max;
	double min;
	int numz,numx;
	while(scanf("%lf",&x)!=EOF)
	{
		/*   已知一个小数,求其小数部分和整数部分
		     则用(int)求其整数部分,
			 然后本值再减去(int)求小数部分
		*/ 
		max=(int)x;
		min=x-max;
		//整数部分转换也要用数组,避免越界 
		if(max==0)
		    printf("0");
		else
		{
		    numz=1;
		    while(max)
		    {
			    zheng[numz]=max%2;
			    max/=2;
			    numz++;
		    }
		    for(i=numz-1;i>=1;i--)
		        printf("%d",zheng[i]);
		}
		/*
		numz=1;
		do
		{
			zheng[numz]=max%2;
			max/=2;
			numz++;
		}while(max!=0);
		//以后如果转换进制需要用数组存储,则用do-while 
		for(i=numz-1;i>=1;i--)
		    printf("%d",zheng[i]);
		 */   
		    
		numx=1;
		while(numx<21&&min)
		{
			xiao[numx]=(int)(min*2);
			//min=min*2-xiao[numx];
			if(min*2>=1)
			    min=min*2-xiao[numx];
			else
			    min*=2;
			numx++;
		}
		for(i=numx-1;i>=1;i--)
		    if(xiao[i]!=0)
		        break;//注意i从numx-1开始 
		numx=i;
		if(numx!=0)
		    printf(".");
		//避免没小数但是输出 . 
		for(i=1;i<=numx;i++)
		    printf("%d",xiao[i]);
		printf("\n");
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

nyoj-647-奋斗小蜗牛在请客(进制转换)

标签:

原文地址:http://blog.csdn.net/wangluoershixiong/article/details/46761657

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!