【问题标题】:Find the division remainder of a number求一个数的除法余数
【发布时间】:2011-07-31 20:56:36
【问题描述】:

如何在 Python 中找到数字的除数余数?

例如:
若数为 26,除数为 7,则除数余数为 5。
(因为 7+7+7=21 和 26-21=5。)

【问题讨论】:

  • 我建议查找modulo 运算符

标签: python integer-division


【解决方案1】:

您正在寻找模运算符:

a % b

例如:

>>> 26 % 7
5

当然,也许他们希望你自己实现,这也不会太难。

【讨论】:

  • 请注意,模运算符总是返回一个正数,因此对于负数,在讨论余数时它可能不是您所期望的:-10 % 3 == 2。但是a/b*b + a%b == a 仍然成立,因为 python 总是朝 -Infinity 舍入,这与其他一些语言不同,后者朝 0 舍入但会返回 -1。
  • 这是因为 Python 的 % 执行一个真正的模数,它返回 [0, divisor) 范围内的值,并与地板除法(朝向负无穷大)很好地配对。 C 语言使用 % 运算符进行余数运算,该运算符返回 (-divisor, divisor) 范围内的值,并与标准除法(接近零)很好地配对。
【解决方案2】:

除法时使用 % 而不是 /。这将为您返回剩余部分。所以在你的情况下

26 % 7 = 5

【讨论】:

    【解决方案3】:

    Modulo 是正确的答案,但如果您手动执行,这应该可以。

    num = input("Enter a number: ")
    div = input("Enter a divisor: ")
    
    while num >= div:
        num -= div
    print num
    

    【讨论】:

    • 仅在 num >= 0 且差异 >0 时有效。
    【解决方案4】:

    可以使用运算符% 发现除法的其余部分:

    >>> 26%7
    5
    

    如果您需要商和模数,可以使用内置的divmod 函数:

    >>> seconds= 137
    >>> minutes, seconds= divmod(seconds, 60)
    

    【讨论】:

      【解决方案5】:

      如果你想避免取模,你也可以使用四个基本操作的组合:)

      26 - (26 // 7 * 7) = 5
      

      【讨论】:

        【解决方案6】:

        26 % 7(你会得到余数)

        26 / 7(你会得到除数,可以是浮点数)

        26 // 7(你会得到除数,只有整数值)

        【讨论】:

          【解决方案7】:

          如果您想要除法问题的余数,只需使用实际的余数规则,就像在数学中一样。当然这不会给你一个小数输出。

          valone = 8
          valtwo = 3
          x = valone / valtwo
          r = valone - (valtwo * x)
          print "Answer: %s with a remainder of %s" % (x, r)
          

          如果你想用计算器格式,只需替换 valone = 8valone = int(input("Value One"))。对valtwo = 3 做同样的事情,但显然不同的变量。

          【讨论】:

          • 您必须将 valone/valtwo 转换为 int。否则它会产生一个浮点数。
          【解决方案8】:

          从 Python 3.7 开始,有一个新的 math.remainder() 函数:

          from math import remainder
          print(remainder(26,7))
          

          输出:

          -2.0  # not 5
          

          注意,如上所述,it's not the same%

          引用documentation

          数学。余数(x, y)

          返回 x 的 IEEE 754 样式余数 尊重 y。对于有限 x 和有限非零 y,这是 差 x - n*y,其中 n 是最接近精确值的整数 的商 x / y。如果 x / y 正好在两者之间 连续整数,n 使用最接近的偶数。这 余数 r = 余数(x, y) 因此总是满足 abs(r)

          特殊情况遵循 IEEE 754:特别是剩余(x,math.inf) 是任何有限 x 的 x,余数 (x, 0) 和余数 (math.inf, x) 为任何非 NaN x 引发 ValueError。如果余数的结果 操作为零,该零将与 x 具有相同的符号。

          在使用 IEEE 754 二进制浮点的平台上,此结果 运算总是可以精确表示的:没有舍入误差 介绍了。

          Issue29962 描述了创建新函数的基本原理。

          【讨论】:

          • math.remainder 可能无法按照您期望的方式工作 python 3.7 示例 >>> math.remainder(-2.99,2) -0.9900000000000002 >>> math.remainder(-3,2) 1.0
          【解决方案9】:

          我们可以通过使用模运算符(%)来解决这个问题

          26 % 7 = 5;

          但是 26 / 7 = 3 因为它会给出商,但 % 运算符会给出余数。

          【讨论】:

          • 如果你使用 Python 2, 26 / 7 = 3 , 对于 Python 3, 26/7 大约是 3.7142857142857144
          【解决方案10】:

          如果您想在一行代码中获得商和余数(更通用的用例),请使用:

          quotient, remainder = divmod(dividend, divisor)
          #or
          divmod(26, 7)
          

          【讨论】:

          • 计算quotient 的更简单方法是使用//quotient = dividend // divisor
          【解决方案11】:

          您可以使用模运算符找到余数 示例

          a=14
          b=10
          print(a%b)
          

          它将打印 4

          【讨论】:

          【解决方案12】:

          您可以定义一个函数并使用 2 个值(如 rem(number1,number2) 返回 number1%number2 然后创建一段时间并将其设置为 true 然后为您的函数打印两个输入,分别保存数字 1 和 2 然后 print(rem(number1,number2)

          【讨论】:

          • 请添加一个工作示例。解释一些理论代码可能很难理解。
          【解决方案13】:

          这是 Python 中余数的整数版本,它应该给出与 C 的“%”运算符相同的结果:

          def remainder(n, d):
              return (-1 if n < 0 else 1) * (abs(n) % abs(d))
          

          预期结果:

          remainder(123, 10)   ==  3
          remainder(123, -10)  ==  3
          remainder(-123, 10)  == -3
          remainder(-123, -10) == -3
          

          【讨论】:

            猜你喜欢
            • 2018-11-04
            • 1970-01-01
            • 2015-12-23
            • 1970-01-01
            • 1970-01-01
            • 2012-01-08
            • 2016-09-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多