输出浮点数

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

题面四行输出就是 printf 的 %f/%.5f/%e/%g;用 printf 四个格式说明符逐行输出即可。

OJ: roj

题目 ID: 1027

难度:入门

标签:输入输出python

创建: 2026-09-29 14:04

更新: 2026-10-04 22:51

题目描述

读入一个双精度浮点数,分别按 %f(默认 6 位小数)、保留 5 位小数的 %f、%e(尾数默认 6 位小数的科学计数法)、%g(6 位有效数字,自动在定点与科学计数法间选择)四种格式输出,各占一行,格式须与 C printf 的语义逐字符一致。

样例输入:12.3456789

样例输出:12.345679、12.34568、1.234568e+01、12.3457,依次各占一行。

思路

题面四行输出就是 printf 的 %f、%.5f、%e、%g,直接用四个格式说明符逐行输出,舍入、补零、去尾零全部交给格式引擎。注意三个 6 的含义不同:%f 的 6 是小数位、%e 的 6 是尾数小数位、%g 的 6 是有效数字。样例第三行 1.234568e+001 是旧编译器的 3 位指数写法,标准 printf 与评测数据均为 2 位指数,按标准格式输出即可通过。

参考代码

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:05
# update_at: 2026-09-29 14:05

import sys

# 题面要求的四种格式:%f、%f 保留 5 位小数、%e、%g(与 C 的 printf 同义)
FORMATS = ('{:.6f}', '{:.5f}', '{:.6e}', '{:g}')


def solve() -> None:
    data = iter(sys.stdin.buffer.read().split())
    x = float(next(data))  # 输入只有一个双精度浮点数
    print('\n'.join(f.format(x) for f in FORMATS))


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:51
 * update_at: 2026-10-04 22:51
 */

#include <cstdio>

// 题面要求的四行输出对应 printf 的 %f、%.5f、%e、%g,
// 注意题面样例第三行写的是 3 位指数(旧编译器写法),
// 但标准 printf 与评测数据都是指数至少 2 位(如 1.234568e+01),按标准格式输出即可。
int main() {
    double x; // 读入的双精度浮点数
    scanf("%lf", &x);
    printf("%f\n", x);       // 定点小数,默认保留 6 位小数
    printf("%.5f\n", x);     // 定点小数,保留 5 位小数
    printf("%e\n", x);       // 科学计数法,尾数默认保留 6 位小数
    printf("%g\n", x);       // 6 位有效数字,定点/科学计数法自动选择并去尾零
    return 0;
}