跳到主要内容
CalcMax

余数计算器

范围:-1,000,000,000 – 1,000,000,000

范围:-1,000,000,000 – 1,000,000,000

结果

9

商

余数
2
验算
5 * 9 + 2 = 47

余数是拿一个整数去除另一个整数、把能整个放进去的份数都拿走之后剩下的那部分,商的份数就是拿走了几份。47 与 5 的答案没有歧义:5 放进 47 能放 9 次,也就是 45,剩下 2,所以商是 9、余数是 2。这两个数不是由某个过程绑在一起的,而是由一句定义绑在一起的——被除数等于除数乘商加余数——所以这一页把验算式和它们一起印出来:商与余数只有成对才是正确的。一旦被除数或除数是负数,歧义就出现了,而这就是这一页的全部主题。有两套口径都在被广泛使用,同样的输入给出不同的答案。截断是把精确商的分数部分丢掉,商朝零的方向走,余数跟着被除数的符号,所以 −47 ÷ 5 截断成 −9、余 −2。向下取整是把商往下推到下一个整数,于是余数不会是负数:−47 ÷ 5 取整成 −10、余 3。两套都满足那句定义——5 × −9 + −2 与 5 × −10 + 3 都等于 −47——所以光靠定义没法知道某个工具用的是哪一套,这正是口径在这里是一个输入项、而不是一个藏起来的默认值的原因。默认给的是截断,因为多数编程语言就是这么做的,多数人说「整数除法」指的也是它;向下取整也叫欧几里得除法,是模运算要的那一套,因为在那个场景里负的余数根本没法用。剩下的特殊情况都能从定义推出来。被除数是 0 时商与余数都是 0。除数比被除数大时,正被除数得到商 0、余数等于被除数。除数整除被除数时余数是 0,两套口径都一样。

−47 与 5 的四种符号组合,在两套口径下各是什么

被除数除数截断欧几里得
-475-9 r -2-10 r 3
-47-59 r -210 r 3
47-5-9 r 2-9 r 2
4759 r 29 r 2

整页就在这四行里。先读最后两行:两个数都为正、以及被除数为正除数为负时,两列写的是同一个答案——47 ÷ 5 不管是哪套口径都是 9 余 2,47 ÷ −5 都是 −9 余 2。两套口径要等被除数为负才分道扬镳。第一行是本页围绕的那一格:−47 ÷ 5 按截断是 −9 余 −2,按向下取整是 −10 余 3,同一个数的两种正确拆法。第二行说明把除数变号会改变商,而余数的口径规则照旧,所以规律并不是「被除数为负则余数为负」这么一句。每一格都满足「被除数 = 除数 × 商 + 余数」——随便挑一格验一下——这也是光靠定义分不出哪一列对的原因。表不跟着你的输入走;上面的面板把你选的那套口径用在你自己的数上。

公式

47 = 5 × 9 + 2 ⇒ 商 9、余 2;而 −47 = 5 × −10 + 3(向下取整)与 −47 = 5 × −9 + −2(截断)

47
被除数,被除的那个数,取 −1000000000 到 1000000000 之间的整数。负数是允许的,而它正是下面那个口径字段存在的理由。小数一律拒绝而不是四舍五入,因为余数是关于整数整除整数的陈述
5
除数,取 −1000000000 到 1000000000 之间的整数。它不能是 0,因为没有任何商能满足验算式。它也可以是负数,而负的除数在两套口径下都会让商变号——验算式是唯一能帮你理清这件事的东西
截断
把精确商的分数部分直接丢掉的这套口径,商朝零的方向走:−47 ÷ 5 得到 −9,因为 −9.4 截断成 −9。余数这时跟着被除数的符号,可以是负数。多数编程语言给的就是这个结果,也是本页的默认口径
欧几里得
把商往下推到下一个整数的那套口径,于是余数永远不会是负数:−47 ÷ 5 得到 −10、余 3。数论与模运算需要这一套,因为余数代表的是循环里的位置,负的位置没有意义。两个数都为正时,两套口径给出同一个答案
商 9
除数能整个放进去的次数。按截断,它是精确商丢掉分数部分;按向下取整,它是精确商向下去整。符号使得余数为负时两者正好差 1,其余情况从不不同
余数 2
剩下的那部分,也是这一页真正在讲的那个数。它的绝对值永远小于除数,能整除时它是 0。它的符号就是两套口径的全部差别:按截断它跟着被除数,按向下取整它不会低于 0

把东西分组是最日常的场合,也是口径永远不会起作用的场合:47 件按 5 件一组分,得到 9 个整组还剩 2 件,没有人会说答案是 −9 组、剩 −2 件。数字一旦可能为负,口径立刻变得要紧,而这件事比看上去常见得多。编程里的整数除法就是最常见的场合——多数语言是截断,所以 −47 / 5 得 −9、余 −2,而假设余数非负的代码遇到负数输入就会出错。模运算是同一条界的另一侧:时间、日期、在一个列表里循环、以及定长整数的机器运算,用的都是向下取整那一套,因为「从当前位置往回退三格」必须落在一个真实的循环位置上。课堂上的余数通常与长除法一起教,负数要么不出现,要么按「符号跟着被除数」那套规则处理。验算式在这些场合里都值得用一下,因为两套口径给出的商差 1、余数差一个除数,而两对都满足定义——真正说明有 bug 的,是对不上定义的那一对,与想用哪套口径无关。

算例

  1. 47 ÷ 5,两套口径一致的一格

    1. 5 放进 47 能放 9 次:5 × 9 = 45
    2. 47 − 45 = 2,所以剩下 2
    3. 精确商是 9.4,截断之后是 9
    4. 9.4 向下取整也是 9,所以两套口径在这里一致
    5. 验算:5 × 9 + 2 = 47

    默认值,也是口径字段完全不起作用的那一格。被除数与除数同号时两套口径总是一致,两个正数当然包括在内——只有其中一个为负时这个选择才显出来。把验算当句子读是值得养成的习惯:除数乘商再加上余数,必须精确回到被除数。

  2. −47 ÷ 5 按截断:余数变成负数

    1. 精确商是 −47 ÷ 5 = −9.4
    2. 截断丢掉分数部分,把商朝零的方向推:−9
    3. 5 × −9 = −45,比 −47 多了 2,所以得往回退 2:余数是 −2
    4. 余数跟着被除数的符号,这就是它在这里为负的原因
    5. 验算:5 × −9 + −2 = −47

    商是 −9 而不是 −10,余数是 −2 而不是 3。这一对与下一对满足的是同一句定义,而这正是本页的要点:−9 余 −2 与 −10 余 3 都是 −47 的正确拆法,口径才是决定拿到哪一对的东西。多数编程语言落在这里,所以假设余数永不为负的代码会被这一行绊倒。

  3. −47 ÷ 5 按向下取整:余数保持非负

    1. 精确商仍然是 −47 ÷ 5 = −9.4
    2. 向下取整把它推到下一个整数而不是朝零推:−10
    3. 5 × −10 = −50,比 −47 少 3,所以剩下 3:余数是 3
    4. 余数不会为负,这是这套口径保证的事
    5. 验算:5 × −10 + 3 = −47

    同一个被除数、同一个除数,答案不同——而这一格不是对上一格的更正。向下取整是模运算要的那一套,因为余数代表循环里的位置时不能为负;在那个场景里 −47 对 5 取模是 3,而取模的结果都被期望落在 0 与除数之间。商比截断那套低 1,余数则正好大一个除数,这就是两套口径之间固定的关系。

  4. 贴着上限、除数为负的一格:1000000000 ÷ −999999999

    1. 除数是负数,所以精确商也是负的:约 −1.000000001
    2. 截断朝零推,得到 −1
    3. −999999999 × −1 = 999999999,比 1000000000 少 1
    4. 余数是 1,它跟着被除数的符号,而这里被除数是正的
    5. 验算:−999999999 × −1 + 1 = 1000000000

    两个数都贴在页面能接受的上限上,而商是 −1,因为除数取绝对值之后刚好比被除数大一点点。值得读的是验算那一行:两个负数乘出正数,再加上余数 1,正好落在被除数上。负的除数在两套口径下都会让商变号,而余数仍然跟着被除数。

局限

被除数与除数都必须是 −1000000000 到 1000000000 之间的整数,而且除数在两套口径下都不能是 0——没有任何数乘以 0 能得到非零的被除数,也就没有哪对商与余数能满足验算式。小数一律拒绝而不是四舍五入:余数是关于整数整除整数的陈述。口径字段只有两个取值,截断与向下取整,两者永远都可选;没有第三种,页面也不会替你猜你想用的是哪一种。两个数都为正时这个选择没有任何影响,而两套口径除了余数的符号与「商差 1」以外从不分歧。按截断时余数可以是负数,那是这套口径的行为而不是错误。下面那张参考表固定在 ±47 与 ±5 上,不跟着你填的数走:它把四种符号组合摊开,好让两套口径并排比较,而上面的面板回答你填的那一对。所有值都精确——四个数都是整数,都远在机器能精确表示的范围内——所以这里没有任何四舍五入。

常见问题

为什么同一个除法会有两个答案?
因为定义只说商乘除数加余数要等于被除数,而被除数为负时,「商小一点配一个负余数」与「商大一点配一个正余数」都满足它。−47 ÷ 5 按截断是 −9 余 −2,按向下取整是 −10 余 3。两个都对,是口径决定你拿到哪一个。
该用哪套口径?
默认给截断,因为多数编程语言给的是它,多数人说「整数除法」指的也是它——商朝零走,余数跟着被除数的符号。要余数非负时就用向下取整:数学意义上的取模、循环里的位置、日期推算、以及任何拿余数当下标去访问重复列表的场合。两个数都为正时,这个选择完全没有影响。
除数是负数时余数是多少?
规则不变,只是商的符号翻了过来。47 ÷ −5 按截断得 −9、余 2,因为余数跟着被除数而不是除数。除数为负改变的是商的符号,而余数的符号规则一点没动,表里第二行写的就是这件事。
这和取模运算是一回事吗?
相关但不相同。取模只返回余数,而且通常定义成结果非负,也就是这里的向下取整那套。差别在负数输入上显出来:−47 对 5 取模是 3,而按截断的整数除法返回 −2。想要结果非负就选向下取整;想让商朝零取整就选截断。
整除时余数是多少?
两套口径下都是 0。除数整个放进去若干次、什么都不剩的时候,验算式就变成「除数乘商等于被除数」,没有第三项要操心。余数为 0 是正常答案,说明除尽了,不是输出出了问题。
为什么除数不能是 0?
因为没有哪对商与余数能满足验算式。除数为 0 时,0 乘以任何商都是 0,于是验算式要求余数等于被除数,同时又要求余数的绝对值小于除数——被除数非零时不可能,而被除数为 0 时答案是所有数而不是某一个。页面宁可拒绝,也不返回一个随便的数。

参考资料

相关计算器