#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 的实验表格里有 个形如 xxx.x 的、保留一位小数的非负实数,其中:
- 小数点前的
xxx表示整数部分 ,为任意非负整数; - 小数点后的
x表示小数部分 ,为一位数字,取值0-9; - 可以是任意位数(如
2026、531或0); 必为一位,且当 时不会省略(如13.0)。
为方便统计分析,小 P 想将它们都近似为整数,具体定义两种计算方式。
- 四舍五入法
- 当 时,向下舍去,结果为 ;
- 当 时,向上进位,结果为 。
- 银行家舍入法(向偶数舍入)
- 当 时,处理与四舍五入法一致( 向下, 向上)。
- 当 时,由于 与相邻整数 和 的距离相同,为避免系统性偏差,向偶数舍入:若 为偶数,则结果为 ;否则结果为 。
现给出小 P 表格中的 个实数(格式如上)。对每个实数,分别计算上述两种方法的取整结果。
输入格式
从标准输入读入数据。
第一行包含一个正整数 ,表示实数个数。
接下来输入 行,每行一个实数,格式与题目描述相符。建议按字符串读取并按规则解析(以避免浮点解析误差),也可采用其他合理方式处理。
输出格式
输出到标准输出。
第一行输出空格分隔的 个整数,表示采用四舍五入法得到的结果。
第二行输出空格分隔的 个整数,表示采用银行家舍入法得到的结果。
4
7.5
0.0
13.9
2026.5
8 0 14 2027
8 0 14 2026
样例 1 解释
对于最后一个实数 ,采用四舍五入法进位到 ,而采用银行家舍入法则取相邻的偶数 。
子任务
的测试数据满足:不存在小数部分 的情况,即两种舍入方法结果相同;
全部的测试数据满足: 且每个实数的整数部分 。
提示
不同编程语言的内置函数(如 round())可能采用不同的舍入策略,建议按照题目描述自行实现上述两种舍入算法。