代码改变世界

无穷的小数

2019-07-20 20:05  木木王韦  阅读(262)  评论(0)    收藏  举报

无穷的小数

单点时限: 1.0 sec

内存限制: 512 MB

在十进制下,我们能够很轻易地判断一个小数的位数是有穷的或无穷的,但是把这个小数用二进制表示出的情况下其有穷性和无穷性就会发生改变,比如

十进制下的 0.5 ,在二进制下的值为 0.1 ;
十进制下的 0.75 ,在二进制下的值为 0.11 ;
十进制下的 0.6 ,在二进制下的值为 0.1001100…

给你一个十进制的小数,判断其在二进制表示下小数位数是否无穷。

输入格式
多组输入,处理到文件结束
每组数据输入一个六位的小数 n.(0≤n<1)

输出格式
如果在二进制下小数位数是有穷的,输出”YES”,否则输出”NO”.

样例
input
0.500000
0.600000
0.750000
output
YES
NO
YES

这道题暴力肯定会超时

反过来算,一直乘二,最多进行六次运算,如果是整数的话,即原来的小数可以用二进制表示

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

int main(){
	double h;
	while(cin>>h){
			int flag=0;
			for(int i=0;i<=6;i++){
				h=h*2.0;
				if(h==(int)h){
					flag=1;
					break;
				}
			}
			if(flag){
				cout<<"YES"<<endl;
			}
			else {
				//cout<<h<<endl;
				cout<<"NO"<<endl;
			}
	}
	return 0;
}