#Z01731. 十进制小数转化为二进制小数 ( 进阶 )

十进制小数转化为二进制小数 ( 进阶 )

题目描述

给定n组分数 每组分数的形式是 a b 请你判断 a/b 在二进制下是否为有限小数? 是的话, 输出一行"YES", 再输出一行这个二进制小数 不是的话, 输出"NO"即可

十进制转换为二进制数   整数部分,把十进制数不断执行除 2 操作,直至商数为 0。读余数从下读到上,即是二进制的整数部分数字。 小数部分,则用其乘 2,取其整数部分的结果,再用计算后的小数部分依此重复计算,算到小数部分全为 0 为止,之后从上到下,读所有计算后整数部分的数字,即为二进制的小数部分数字。

比如 0.25 0.25 * 2 = 0.50      0  0.50 * 2 = 1.00      1  所以 0.25(D) = 0.01(B)

但是 0.6 就无法算完 0.60 * 2 = 1.20      1 0.20 * 2 = 0.40      0 0.40 * 2 = 0.80      0 0.80 * 2 = 1.60      1 0.60 * 2 = 1.20      1 ...... 所以也就是 0.10011... 是一个无限小数

输入格式

先输入一个 n, 表示有 n组数据 (1 接着输入 n行数据, 每行两个数 a, b  (1

输出格式

判断是否为有限小数 是的话, 输出 "YES", 再输出这个二进制小数 不是的话, 输出 "NO"

6
1 4
6 8
2 7
3 8
4 6
3 5
YES
1 / 4 (D) = 0.01 (B)
YES
6 / 8 (D) = 0.11 (B)
NO
YES
3 / 8 (D) = 0.011 (B)
NO
NO