#CSP202605A. 银行家舍入

银行家舍入

题目来自第 42 次 CSP 认证 T1,评测使用自造高质量复刻数据。我们承认原始题面与大样例版权均归中国计算机学会(CCF)所有,因此题面与评测服务均免费对外开放。如果您认为我们侵犯了您的权益,可联系我们

时间限制: 1.0 秒

空间限制: 512 MB

题目背景

IEEE 二进制浮点数算术标准(IEEE 754)是 20 世纪 80 年代以来最广泛使用的浮点数运算标准,为许多 CPU 与浮点运算器所采用。银行家舍入法(Banker's Rounding),又称“向偶数舍入”(round half to even),是 IEEE 754 推荐的默认舍入方式。

题目描述

小 P 的实验表格里有 nn 个形如 xxx.x 的、保留一位小数的非负实数,其中:

  • 小数点前的 xxx 表示整数部分 aa,为任意非负整数;
  • 小数点后的 x 表示小数部分 bb,为一位数字,取值 0-9
  • aa 可以是任意位数(如 20265310);bb 必为一位,且当 b=0b=0 时不会省略(如 13.0)。

为方便统计分析,小 P 想将它们都近似为整数,具体定义两种计算方式。

  1. 四舍五入法
  • 0b40 \le b \le 4 时,向下舍去,结果为 aa
  • 5b95 \le b \le 9 时,向上进位,结果为 a+1a+1
  1. 银行家舍入法(向偶数舍入)
  • b5b \neq 5 时,处理与四舍五入法一致(b4b\le4 向下,b6b\ge6 向上)。
  • b=5b = 5 时,由于 a+0.5a+0.5 与相邻整数 aaa+1a+1 的距离相同,为避免系统性偏差,向偶数舍入:若 aa 为偶数,则结果为 aa;否则结果为 a+1a+1

现给出小 P 表格中的 nn 个实数(格式如上)。对每个实数,分别计算上述两种方法的取整结果。

输入格式

从标准输入读入数据。

第一行包含一个正整数 nn,表示实数个数。

接下来输入 nn 行,每行一个实数,格式与题目描述相符。建议按字符串读取并按规则解析(以避免浮点解析误差),也可采用其他合理方式处理。

输出格式

输出到标准输出。

第一行输出空格分隔的 nn 个整数,表示采用四舍五入法得到的结果。

第二行输出空格分隔的 nn 个整数,表示采用银行家舍入法得到的结果。

4
7.5
0.0
13.9
2026.5
8 0 14 2027
8 0 14 2026

样例 1 解释

对于最后一个实数 2026.52026.5,采用四舍五入法进位到 20272027,而采用银行家舍入法则取相邻的偶数 20262026

子任务

50%50\% 的测试数据满足:不存在小数部分 b=5b=5 的情况,即两种舍入方法结果相同;

全部的测试数据满足:n100n \le 100 且每个实数的整数部分 a105a \le 10^{5}

提示

不同编程语言的内置函数(如 round())可能采用不同的舍入策略,建议按照题目描述自行实现上述两种舍入算法。