带余除法

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

C++ 的 / 向零截断、% 符号随被除数,正是评测数据采用的带余除法语义,直接输出 a/b 与 a%b 即可。

OJ: roj

题目 ID: 1009

难度:入门

标签:输入输出数学python

创建: 2026-09-29 13:07

更新: 2026-10-04 22:22

题目描述

给定被除数 aa 与非零除数 bb,求整数商 qq 与余数 rr,满足 a=q⋅b+ra = q \cdot b + r 且 ∣r∣<∣b∣|r| < |b|,用默认的整除和取余运算即可,无需特殊处理。输入一行两个整数 a,ba,b(b≠0b \ne 0);输出一行两个整数,依次为商与余数。样例输入 10 3,样例输出 3 1。

思路

C++ 的 / 向零截断、% 的符号随被除数,恰好就是评测数据采用的语义,所以商直接取 a / b、余数直接取 a % b 输出即可,不必做任何修正。

参考代码

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 13:07
# update_at: 2026-09-29 13:07

import sys


def solve() -> None:
    dividend, divisor = map(int, sys.stdin.buffer.read().split())

    # 评测数据按 C 语义给答案:商向零截断,再用商回推余数。
    # Python 的 // 是向下取整,除数为负时会整体偏移,必须自己截断。
    opposite_sign = (dividend < 0) != (divisor < 0)   # 异号 → 商为负
    quot = abs(dividend) // abs(divisor)              # 先算非负商
    if opposite_sign:
        quot = -quot
    rem = dividend - quot * divisor                   # 余数与截断商配套,符号随被除数

    print(quot, rem)


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:22
 * update_at: 2026-10-04 22:22
 */
#include <iostream>
using namespace std;

typedef long long ll;

ll dividend, divisor; // 被除数 a 与除数 b(b 非零)

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    cin >> dividend >> divisor;

    // C++ 的 / 向零截断、% 的符号随被除数,正是本题采用的带余除法语义:
    // 商与余数满足 a = q*b + r 且 |r| < |b|,直接输出即可,无需特殊处理。
    cout << dividend / divisor << " " << dividend % divisor << "\n";

    return 0;
}