十进制数中的1位数

Ric*_*ard 2 haskell

如何编写一个函数来返回对应十进制数的1位数?也许是平方根函数?类型应该是这样的:

bits :: Int -> Int
Run Code Online (Sandbox Code Playgroud)

编辑:厌倦了

uns :: Int -> Int
uns  0 = 0
uns 1 = 1
uns x | mod x 2 == 1 = 1 + uns (div x 2)
      | otherwise = uns (div x 2)
Run Code Online (Sandbox Code Playgroud)

Eri*_*ikR 7

这个老把戏怎么样?

import Data.Bits

countOnes 0 = 0
countOnes x = 1 + countOnes (x .&. (x-1))
Run Code Online (Sandbox Code Playgroud)

它只递归n次,其中nx中一位的数量.

当然,如果您要导入Data.Bits,那么您可以使用popCount@Cirdec建议.


fra*_*ale 5

使用popCountfrom Data.Bits,也称为数字的汉明权重。优点是某些 CPU 有专门用于计算的指令,从而实现高性能。

\n\n
\xce\xbb> import Data.Bits\n\xce\xbb> :t popCount\npopCount :: Bits a => a -> Int\n\xce\xbb> popCount 255\n8\n\xce\xbb> popCount 0xa5\n4\n
Run Code Online (Sandbox Code Playgroud)\n