四个 token 按各自类型读入并空格分隔输出:第 3 个数是单精度,必须存进 float,数值到 10^5 量级时 6 位小数才与参考解一致。
OJ: roj
题目 ID: 1026
难度:入门
标签:入门输入输出浮点数python
创建: 2026-09-29 14:04
更新: 2026-10-04 22:44
题目描述
读入一个字符、一个整数、一个单精度浮点数、一个双精度浮点数(输入共四行,依次为这四个值),然后按顺序输出它们,之间用一个空格分隔;输出浮点数时保留 6 位小数。
样例:输入四行 a / 12 / 2.3 / 3.2,输出 a 12 2.300000 3.200000。
思路
四个 token 各自按类型读入:字符用 char、整数用 int,第 3 个数必须用 float(单精度)存,第 4 个数用 double 存。输出用 %.6f 定点格式一次完成四舍五入与补零;当数值量级到 double 读第 3 个数会让第 6 位小数出错。
参考代码
Python 版:
python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 14:04
# update_at: 2026-09-29 14:04
import struct
import sys
def to_float32(text: str) -> float:
"""按 C++ float 的精度读入:先解析成 double,再截回单精度的精确值。"""
return struct.unpack("f", struct.pack("f", float(text)))[0]
def solve() -> None:
ch, a, b, c = sys.stdin.read().split() # cin >> 按空白分词,四行还是一行都一样
# int() 抹掉整数可能的前导 0;两个浮点都要保留 6 位小数
print(ch, int(a), f"{to_float32(b):.6f}", f"{float(c):.6f}")
if __name__ == "__main__":
solve()C++ 版(同一算法):
cpp
/**
* Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
* rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
* rainboy的学习导航网站: https://idx.roj.ac.cn
* create_at: 2026-10-04 22:44
* update_at: 2026-10-04 22:44
*/
#include <cstdio>
// 全局变量:按题意保存四个 token,类型是本题的考点
char ch; // 字符
int n; // 整数
float a; // 单精度浮点数(必须用 float,别写成 double)
double b; // 双精度浮点数
int main() {
// cin >> 按空白分词,按各自类型解析文本,题面的四行写法不影响读入
std::scanf(" %c %d %f %lf", &ch, &n, &a, &b);
// %.6f 一次完成四舍五入、补零和负号处理
std::printf("%c %d %.6f %.6f\n", ch, n, a, b);
return 0;
}