单点时限: 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
思路:二进制小数的转换,,乘2遇1减1,,,,当迭代到一定次数时 程序退出,说明无限小数
#include<iostream> #include<cstdio> using namespace std; typedef long long ll; int main() { double a; while(cin>>a) { ll b,sum=0; b=a*10000000; b=(ll)b; while(1){ sum++; b=b<<1; if(b>=10000000){ b=b-10000000; } if(b==0||sum>=200){ break; } } if(b==0){ cout<<"YES"<<endl; } else cout<<"NO"<<endl; } return 0; }