无穷小数
在十进制下,我们能够很轻易地判断一个小数的位数是有穷的或无穷的,但是把这个小数用二进制表示出的情况下其有穷性和无穷性就会发生改变,比如
十进制下的 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
对于这一题的思路主要是将小数后六位转化为整数然后进行输出。比如0.500000可以乘以1e7然后转化为整数然后进行乘以2如果大于1e7就减去 然后进行循环判断如果循环多少次就是无穷这里可以设定为100次 其次就是如果恰好等于1e7则证明这个数不是无穷小数
代码如下
using namespace std;
int main(){
double y;
while(scanf("%lf",&y)!=EOF){
y*=10000000;
bool flag=0;
long long x=(long long)y;
int num=0;
while(1){
if(x==0) break;
if(num>=200){
flag=1;break;
}
num++;
x=2*x;
if(x>=10000000) x-=10000000;
if(x==0) break;
}
if(flag) puts("NO");
else puts("YES");
}
return 0;
}