hiho一下 第157周/1311 : 二进制小数

来源:互联网 发布:测温软件有悬浮 编辑:程序博客网 时间:2024/05/18 00:25

二进制小数


题目链接

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定一个十进制小数X,判断X的二进制表示是否是有限确定的。

例如0.5的二进制表示是0.1,0.75的二进制表示是0.11,0.3没有确定有限的二进制表示。

输入

第一行包含一个整数 T (1 ≤ T ≤ 10),表示测试数据的组数。

以下T行每行包含一个十进制小数 X (0 < X < 1)。 X一定是以"0."开头,小数部分不超过100位。

输出

对于每组输入,输出 X 的二进制表示或者NO(如果 X 没有确定有限的二进制表示)。

样例输入
30.50.750.3
样例输出
0.10.11NO

#include <iostream>#include <stdio.h>#include <string.h>#include <cstring>using namespace std;int main(){int T;bool flag;cin>>T;while (T--){char s[105];scanf ("%s",s);int lens=strlen(s);if (s[lens-1]!='5'){cout<<"NO"<<endl;continue;}char str[105]="0.";int k=2;for (int i=lens-1;i>1;i--){int num[i];memset(num,0,sizeof(num));flag=0;if (s[i]!='5'){flag=1;break;}bool add=0;for (int j=i;j>1;j--){if (add==1){num[j]=(s[j]-'0')*2+1;add=0;}elsenum[j]=(s[j]-'0')*2;if (num[j]>9){add=1;num[j]-=10;num[j-1]+=1;}s[j]=num[j]+'0';}str[k++]=(num[1]+'0');}if (flag==1)cout<<"NO"<<endl;elseprintf ("%s\n",str);}return 0;}