Go 带返回商和余数的除法

Go 带返回商和余数的除法,go,Go,我尝试从Python迁移到Golang。我目前正在研究一些数学运算,想知道如何用除法的结果同时得到商和余数。下面我将与大家分享一段相当于Python的代码 hours, remainder = divmod(5566, 3600) minutes, seconds = divmod(remainder, 60) print('%s:%s' % (minutes, seconds)) # 32:46 以上将是我的目标。谢谢。整数除法加模可以实现这一点 func divmod(numerator,

我尝试从Python迁移到Golang。我目前正在研究一些数学运算,想知道如何用除法的结果同时得到商和余数。下面我将与大家分享一段相当于Python的代码

hours, remainder = divmod(5566, 3600)
minutes, seconds = divmod(remainder, 60)
print('%s:%s' % (minutes, seconds))
# 32:46

以上将是我的目标。谢谢。

整数除法加模可以实现这一点

func divmod(numerator, denominator int64) (quotient, remainder int64) {
    quotient = numerator / denominator // integer division, decimals are truncated
    remainder = numerator % denominator
    return
}

编辑:定义

在整数除法中,是分子进入分母的整数倍数。换句话说,它与十进制语句相同:
FLOOR(n/d)


给出这种除法的剩余部分。分子和分母的模数将始终介于0和d-1之间(其中d是分母)

如果您想要一行

quotient, remainder := numerator/denominator, numerator%denominator

如果您有一个32位的数字,您可以使用其中一个:

package main
import "math/bits"

func main() {
   { // example 1
      var n uint = 4294967295
      q, r := bits.Div(0, n, 2)
      println(q == n / 2, r == 1)
   }
   { // example 2
      var n uint32 = 4294967295
      q, r := bits.Div32(0, n, 2)
      println(q == n / 2, r == 1)
   }
}
如果您有一个64位数字,您可以这样做:

package main
import "math/bits"

func main() {
   var n uint64 = 18446744073709551615
   q, r := bits.Div64(0, n, 2)
   println(q == n / 2, r == 1)
}
package main
import "math/bits"

func main() {
   q, r := bits.Div64(1, 0, 2)
   println(q == 9223372036854775808, r == 0)
}
如果您有大于64位的内容,可以这样做:

package main
import "math/bits"

func main() {
   var n uint64 = 18446744073709551615
   q, r := bits.Div64(0, n, 2)
   println(q == n / 2, r == 1)
}
package main
import "math/bits"

func main() {
   q, r := bits.Div64(1, 0, 2)
   println(q == 9223372036854775808, r == 0)
}

您的解决方案非常清晰。我很难过没有像Python这样的内置软件。