输入:两个自然数n, m∈n 0 -输出:n和m的十进制表示的不同位数的个数



我得到了以下信息的任务:

  • 输入:两个自然数n, m∈n 0
  • 输出:n和m的十进制表示的不同位数的个数

输入:两个自然数n,k输出:n二进制表示的第2^k位的数字

我的想法是:

stelle :: Int -> Int -> Int
stelle n 0 = mod n 2
stelle n k = stelle (div n 2) (k-1)
stelle n k = n k <= O = error

在最后一行,haskell显示有一个错误。用这行代码,我想表明n和k必须是自然数,所以如果n, k <= 0,则代码不可用。有人能帮我一下吗?

我的第二次尝试是:

stelle :: Int -> Int -> Int                                  
stelle n 0 = mod n 2                                         
stelle n k
| n < 0 && k < 0 = error "Vorraussetzung nicht erfüllt" 
| n >= 0 && k >= 0 = (div n 2) (k-1)

你可以使用这样的保护符:

stelle :: Int -> Int -> Int
stelle n k |n < 0 || k < O= error "Vorraussetzung nicht erfüllt"
stelle n 0 = mod n 2
stelle n k = stelle (div n 2) (k-1)