hiho一下 第157周 二进制小数

来源:互联网 发布:金字塔软件官网 编辑:程序博客网 时间:2024/06/08 14:16

题意

给定一个十进制小数X(X一定是以”0.”开头,小数部分不超过100位),判断X的二进制表示是否是有限确定的。
例如0.5的二进制表示是0.1,0.75的二进制表示是0.11,0.3没有确定有限的二进制表示。

解题思路

我们用数组模拟十进制小数转二进制小数的过程——乘二减一。
假设X的小数部分有N位,如果我们经过N次操作结果仍不为0,那么X就不能表示成有限位数的二进制小数。

参考代码

#include <iostream>#include <string.h>using namespace std;char str[200];int ans[200];void mul(int len){    int k=0;    for (int i=len-1;i>=0;i--){        if (i==1) continue;        int tmp=k+(str[i]-'0')*2;        k=tmp/10;        str[i]=tmp%10+'0';    }}bool check(int len){    int cnt=0;    for (int i=0;i<len;i++){        if (i==1) continue;        if (str[i]-'0'!=0){            cnt++;            break;        }    }    if (cnt) return 0;    return 1;}int main(){    int t;    cin>>t;    while (t--){        cin>>str;        int len=strlen(str);        int k=0,flag=0;        while (check(len)==0){            mul(len);            ans[k++]=str[0]-'0';            str[0]='0';            if (k>len){                flag=1;                break;            }        }        if (flag) cout<<"NO"<<endl;        else{            cout<<"0.";            for (int i=0;i<k;i++) cout<<ans[i];            cout<<endl;        }    }    return 0;}
原创粉丝点击