空格分隔输出

GitHub跳转原题关系图返回列表

四个 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 定点格式一次完成四舍五入与补零;当数值量级到 10510^5 时 binary32 的舍入间距超过 10−610^{-6},用 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;
}