1783:luo double

时间限制:1 S   /  内存限制:65536 KB
AC:43   /  Submit:144
问题描述

罗少写了这样一段代码:

double a;
cin >> a;
cout << a;

紧接着他输入(input)了几个数字,并得到了以下输出(output):

input:  01010
output: 1010
input:  1023.000001020
output: 1023
input:  0456.78900
output: 456.789
input:  0000.1000
output: 0.1
input:  998244353
output: 9.98244e+008
input:  .18057
output: 0.18057

罗少发现,doubledouble类型的数据在输出时,没有意义的00都被忽略了,小数点前遗漏的的00也会补上。

不仅如此,罗少还发现当输入的数字位数较长时,这段代码似乎不能精确地输出结果,查阅相关资料后罗少得知:

默认情况下,cout 只输出 6 位有效数字(这 6 位包括小数点前的数字,小数点后最后一位会四舍五入),于是罗少又来了一组输入想验证一下

input:  12.3456789
output: 12.3457

果然没错!但是对于一个追求完美的人来说,这样的结果显然是罗少不能接受的。

他想发明一种新的数据类型luo doubleluo\ double,默认输出10241024位有效数字,其他和doubledouble是一样的。

输入描述

第一行是一个正整数TT表示测试案例的数量。(1T1001 \leq T \leq 100

每组案例包含一个可能无法用doubledouble进行精确存储的实数nn,并保证:

nn的长度在11001-100之间且只可能是整数或小数。

● 如果nn是整数,那么nn的每一位均由090-9构成。

● 如果nn是小数,那么它一定可以表示成a.b.b的形式,其中a,ba,b的每一位也均由090-9构成。

输出描述

针对每组案例,输出一个数字表示你的答案。

样例输入复制样例

7

01010

1023.000001020

0456.78900

0000.1000

998244353

.18057

12.3456789

样例输出

1010

1023.00000102

456.789

0.1

998244353

0.18057

12.3456789

提示说明

luo doubleluo\ double默认输出10241024位有效数字,而给定的nn最长只有100100位,所以一定不会发生四舍五入。

因此你可以用上面提供的代码来测试doubledouble有效位数以内的数据,其输出的答案应该与你的代码一致。

换言之,本题似乎只需要你找到一个与输入数字nn相等的最简数字,其输出格式应符合数学中的表达。

相关

23-24(1)第6次线上赛


Copyright 2016 - 2025 XUJC ACM Team
闽ICP备2020022076号-1