分别用固定小数、科学计数法和通用格式输出同一个双精度浮点数。
OJ: noi_openjudge
题目 ID: ch0101-07
难度:入门
标签:浮点数输出python
日期: 2026-07-30 23:01
题意
对同一个双精度浮点数输出四行:默认 %f 形式、保留 5 位小数的 %f 形式、%e 科学计数法形式和 %g 通用形式。
思路
Python 的 .6f 对应默认 %f 的 6 位小数,.5f 对应保留 5 位小数;.6e 与 .6g 分别给出默认精度为 6 的科学计数法和通用格式。
题目样例中的指数部分固定为 3 位,例如 e+001。Python 默认会输出 e+01,因此把结果按 e 拆开,保留符号后把指数的绝对值补到 3 位。对于普通小数形式的 %g,辅助函数会原样返回。
代码
Python代码
python
def format_exponent(text):
"""把 Python 的 e+01 形式改成题目样例要求的 e+001。"""
if "e" not in text:
return text
mantissa, exponent = text.split("e")
return f"{mantissa}e{exponent[0]}{int(exponent[1:]):03d}"
value = float(input())
print(f"{value:.6f}")
print(f"{value:.5f}")
print(format_exponent(f"{value:.6e}"))
print(format_exponent(f"{value:.6g}"))C++代码
这里保留原有的 C++ 参考实现。
cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
double d;
cin>>d;
cout<<d<<endl;
cout<<fixed<<setw(5)<<d<<endl;
cout<<scientific<<d<<endl;
cout<<d<<endl;
return 0;
}复杂度
输出次数固定为 4 次,时间复杂度为
总结
浮点题先区分“有效数字”和“小数位数”:f 控制固定小数位,g 控制有效数字,e 使用科学计数法。样例对指数位数有额外要求时,再单独格式化指数。