将整数除以整数并返回整数

80

我需要一个函数,该函数获取两个整数(ab)并将 A/B 作为 Int 返回。 我确定 A/B 总是一个整数。

这是我的解决方案:

myDiv :: Int -> Int -> Int
myDiv a b = 
      let x = fromIntegral a
          y = fromIntegral b
      in truncate (x / y)

但想要找到更简单的解决方案。类似于这样:

myDiv :: Int -> Int -> Int
myDiv a b = a / b

我该如何将整数除以整数并得到整数?

2个回答

145

为什么不直接使用quot

quot a b

是整数a和b的商,向零截断。


7
对于中缀操作符的爱好者来说,可以使用 a \quot` b` (哇,你居然可以用反斜杠在反引号内转义反引号?) - user395760
38
也就是 a \div` b;如果我没记错的话,quot是截断除法(就像 Demas 想要的),而div则向零舍入。所以(-3) `quot` 4 == 0,而 (-3) `div` 4 == -1`。 - Antal Spector-Zabusky
5
对于 div 来说要加1。在数学上更加规范,当涉及到负数时,quot 会出现问题。 - luqui
这对我来说真是救命稻草。我一直在与 fromIntegral (ceiling (int1 / int2)) 和其他东西搏斗 - 没有一个能给我返回一个 Int,但这个可以。 - MuffinTheMan
11
div 向负无穷取整,而不是零。 - Lacuno
显示剩余2条评论

1
这是我自己做的方法:


quot' a b
         | a<b = 0  -- base case
         | otherwise = 1 + quot' a-b b

2
作为一种练习很好,但在生产中毫无用处。在大量数据上它运行缓慢(线性时间),并且具有高内存占用(不是尾递归)。对于负数,它要么是错误的(a<0),要么永远不会结束(b<0)。 - Ruud Helderman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接