seuOJ413 - 数学问题

题目描述

给你一个小数 c(0c2000)c(0\leq c \leq 2000) ,请你构造一个分数,可以表示这个小数,使该分数和小数之间的差值不超过 10610^{-6}

输入格式

第一行,一个整数 n(1n104)n(1\le n \le 10^4),代表数据组数。
接下来的 nn 行,每行一个小数 cc

输出格式

对于每组数据,输出一行表示答案。
如果存在两个满足要求的数字可以表示cc,按照先分子后分母的顺序输出这两个整数 a,ba,b
否则,输出“-1”(不含引号)。

样例

样例输入1

2
3.1415926
0.0

样例输出1

355 113
0 1

数据范围与提示

对于你输出的两个整数 a,ba,b 有如下要求:

  1. 0a,b2×1090 \leq a,b\leq 2\times 10^9
  2. a,ba,b 必须的最大公因数是 11 (即 a,ba,b 互质, gcd(a,b)=1\gcd(a,b)=1 )。
  3. abc106|\frac{a}{b}-c|\leq 10^{-6}

你的输出不需要和样例输出一样,只需满足以上条件即被视作正确。

如果你的答案非法,会收到如下信息:

  1. 输出的分母为 00 : The denominator is 0!
  2. 输出的 a,ba,b 范围不合法: a or b is out of range!
  3. 输出的 a,ba,b 不互质: The gcd of a and b is not 1!
  4. abc>106|\frac{a}{b}-c|> 10^{-6}: Your answer is worng!

约定 gcd(0,x)=gcd(x,0)=x\gcd(0,x)=\gcd(x,0)=x