带余除法计算器
输入被除数与除数,得到商、余数、验算式(a = b × q + r)、最大公约数,以及分数与带分数形式;支持大整数,并并排展示数学与编程两种余数口径。
分东西、排班轮转、写代码取模,本质上都是同一道题:除以一个数,剩多少?小学生要的是验算式,程序员要的是各语言一致的余数——偏偏负数出现时两边的答案会不一样。这里把商、余数、验算和分数形式一并给出,两套口径并排摆着,谁看了都不含糊。
两种口径的差异是重点:数学口径余数非负(-7 ÷ 3 = -3 余 2),编程语言多数跟随被除数符号(C/Java/JS:-7 % 3 = -1),Python 的 % 跟随除数符号(-7 % 3 = 2)——跨语言移植代码时取模结果可能差一个除数,本工具两种都给出并标注。
这个工具解决你的问题了吗?
提交后会把工具名、你的输入与当前结果发送到服务器;请勿填写身份证号、手机号等隐私信息。
AI 助手 会结合你当前的输入与结果回答
追问会再次把当前输入与结果发送到服务器;请勿填写隐私信息。
使用步骤
- 输入被除数与除数(支持负数与大整数)。
- 看商、余数与验算式;分数与带分数形式对照。
- 对比数学口径与编程口径的余数差异(负数时不同)。
- 复制结果;写代码时按目标语言的 % 语义取值。
计算原理与示例
带余除法的算法
带余除法就是把「除不尽」写清楚:a = b × q + r。先取不超过被除数的最大整数倍得到商 q,剩下的部分就是余数 r。以 100 ÷ 7 为例:7 × 14 = 98 是最接近 100 的整数倍,商 14、余 2,验算式为 100 = 7 × 14 + 2。余数为 0 时称为整除。
负数下的两种余数口径
负数是分歧点,有两套通行口径。数学口径(欧几里得除法)要求 0 ≤ r < |b|,余数恒非负:−7 ÷ 3 写作 3 × (−3) + 2 = −7,商 −3、余 2。编程口径(C、Java、JavaScript 的 % 运算符)余数符号跟随被除数:−7 % 3 = −1,此时商是 −2。两种约定都成立,本工具默认数学口径,可一键切换对比。
余数能用来做什么
余数的常见用途有三类:判断整除(r = 0,如能否被 3 整除)、循环取模(哈希表索引、循环队列、按星期排班)、以及把假分数化成带分数(7/3 = 2 + 1/3 就是商与余数)。此外求最大公约数的欧几里得算法本身就是反复做带余除法,所以本工具顺手给出 gcd(|a|, |b|)。
计算依据:a = b × q + r;数学口径(欧几里得除法)取 0 ≤ r < |b|(商向负无穷取整),编程口径取余数符号跟随被除数(商向零截断);整数运算使用 BigInt(限 1000 位以内),最大公约数用欧几里得算法。
代码示例
JavaScript 两种余数口径
const divmod = (a, b) => {
const q = Math.trunc(a / b); // 商向零取整(C/Java/JS 口径)
const rProg = a % b; // 编程口径:符号随被除数
const rMath = ((a % b) + b) % b; // 数学口径:恒非负
return { q, rProg, rMath };
};
divmod(-7, 3); // { q: -2, rProg: -1, rMath: 2 }
Python divmod 内置双返回
divmod(-7, 3) # (-3, 2)(Python 口径:商向下取整,余数随除数)
divmod(17, 5) # (3, 2)
# 注意 Python 与 C/Java 的 % 语义不同:
# -7 % 3 在 Python 是 2,在 JS/Java 是 -1
# 跨语言移植取模逻辑时必须核对
常见问题
带余除法的公式是什么?
a = b × q + r,其中 a 是被除数、b 是除数、q 是商、r 是余数,且要求 0 ≤ r < |b|。以 100 ÷ 7 为例:100 = 7 × 14 + 2,商 14、余 2,13 不行因为 7 × 13 = 91 < 100 还差 9,15 也不行因为 7 × 15 = 105 超了。
负数除以正数怎么算余数?
取决于口径。数学口径要求余数非负:−7 ÷ 3 = 3 × (−3) + 2,商 −3、余 2;编程口径向零截断:−7 % 3 = −1,商 −2。数学题、数论里几乎都用前一种,写代码时要注意所用语言默认是后一种。
为什么同一个除法会有两种余数?
因为商的取整方向不同:向负无穷取整(floor)会得到非负余数,向零取整(truncate)会让余数符号跟随被除数。两者都满足 a = b × q + r,只是选了不同的 q,于是 r 也跟着不同。余数大小分别是 2 和 −1,相差的正好是一个除数。
小数能做带余除法吗?
本工具只处理整数,因为带余除法本身就是为整数定义的。若被除数或除数含小数,可以先同时乘以 10 的幂化成整数再算:7.5 ÷ 2 化成 75 ÷ 20,商 3、余 15(再除以 10 就是 1.5)。含分数的除法建议改用分数计算器。
能算多大的数?
用 BigInt 精确运算,1000 位以内都没问题。例如 12345678901234567890 ÷ 97 = 127275040218913071 余 3,验算式完全对得上,不会出现浮点误差。超过 1000 位会提示缩小规模,这是防止页面卡死的保护。
余数为 0 说明什么?
说明整除,即被除数是除数的整数倍,此时商就是精确的比值(12 ÷ 4 = 3)。本工具会标出「整除(余数为 0)」。判断能否被 3 或 9 整除时,还可以用各位数字之和的余数来快速心算。
带分数和带余除法是一回事吗?
本质相同。7 ÷ 3 的商是 2、余数是 1,写成带分数就是 2 + 1/3,本工具在「带分数形式」一行直接给出。反过来看到 2 + 1/3,分子就是 2 × 3 + 1 = 7。约分后分子分母有公因数时,分数形式那一行会先化简。
为什么这里顺便给了最大公约数?
因为求最大公约数的欧几里得算法就是反复做带余除法:gcd(a, b) = gcd(b, a mod b),直到余数为 0,最后一个非零余数就是最大公约数。本工具顺手把 gcd(|a|, |b|) 算出来,方便约分、化简与通分。
延伸阅读
来自本站原创文章,讲清这个工具背后的算法与口径。