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

hihocoder1311 二进制小数

时间:2017-07-01 22:37:54      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:测试   ring   单点   输出   表示   十进制   bkdrhash   包含   nbsp   

  

时间限制: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 没有确定有限的二进制表示)。

样例输入
3
0.5
0.75
0.3
样例输出
0.1
0.11
NO

题意:十进制小数转二进制,输出二进制小数,无限循环则输出NO

题解:二进制小数,高精度乘法加个特判即可,这里还用到了hash

 

#include <bits/stdc++.h>
using namespace std;
map<int, int>mp;
string s, ans;
int BKDRHash(string s){
    long long seed=131;
    long long hash=0;
    int i = 0;
    while(i<s.size()&&s[i]) hash=hash*seed+(s[i++]);
    return (hash & 0x7FFFFFFF);
}
string Multiply(string s,int x){//模版
    reverse(s.begin(),s.end());
    int cmp=0;
    for(int i=0;i<s.size();i++){
        cmp=(s[i]-0)*x+cmp;
        s[i]=(cmp%10+0);
        cmp/=10;
    }
    while(cmp){
        s+=(cmp%10+0);  
        cmp/=10;  
    }
    reverse(s.begin(),s.end());
    return s;
}
bool f(string s){
    int i;
    for(i=0;i<s.size();i++)
        if(s[i] != 0) break;
    if(i>=s.size()) return 1;
    return 0;
}
int main(){
    int T, flag, l;
    cin>>T;
    while(T--){
        cin>>s;
        int i = s.size()-1;
        while(i>=0&&s[i]==0) i--;
        if(i>=0&&s[i]!=5) {
            cout<<"NO"<<endl;
            continue;
        }
        ans = "";mp.clear();
        flag = 0;
        s.erase(0,2);
        l = s.size();
        while(mp[BKDRHash(s)] == 0){
            mp[BKDRHash(s)] = 1;
            s = Multiply(s, 2);
            if(f(s)){
                flag = 1;
                break;
            }
            if(s.size() != l) s.erase(0, 1), ans += 1;
            else ans += 0;
        }
        if(flag == 1) cout<<"0."<<ans<<endl;
        else cout<<"NO"<<endl;
    }
    return 0;
}

 

hihocoder1311 二进制小数

标签:测试   ring   单点   输出   表示   十进制   bkdrhash   包含   nbsp   

原文地址:http://www.cnblogs.com/Noevon/p/7103518.html

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