奋斗小蜗牛在请客
时间限制:
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; }
-
多组测试数据,