浮点取余直接按定义落地:math.fmod 给出精确余数 r=a-k·b,再用 .6g 按 6 位有效数字输出,与 C++ cout 参考解逐字一致。
OJ: roj
题目 ID: 1029
难度:入门
标签:入门输入输出浮点数python
创建: 2026-09-29 14:06
更新: 2026-10-04 22:52
题目描述
给定两个双精度浮点数 73.263 0.9973
样例输出:0.4601
思路
直接调用 fmod(a, b) 得到精确余数(IEEE-754 保证结果落在 cout 以默认 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:08
# update_at: 2026-09-29 14:08
import sys
import math
def remainder(a: float, b: float) -> float:
"""a 除以 b 的余数 r:满足 a = k*b + r(k 为整数,0 <= r < b)。"""
# fmod 直接给出精确余数,比 a - int(a/b)*b 少一次乘法回代的舍入误差
return math.fmod(a, b)
def solve() -> None:
data = iter(map(float, sys.stdin.buffer.read().split()))
a = next(data)
b = next(data)
# 题面样例与评测数据按 6 位有效数字输出(与 C++ cout 默认精度一致)
print(f"{remainder(a, b):.6g}")
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:52
* update_at: 2026-10-04 22:52
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
double a, b; // 输入:两个双精度浮点数
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> a >> b;
// fmod(a, b) 按 IEEE-754 定义给出精确余数 r,满足 a = k*b + r 且 0 <= r < |b|
double r = fmod(a, b);
// cout 默认精度为 6 位有效数字,与题面期望输出一致
cout << r << endl;
return 0;
}