【发布时间】:2018-04-12 07:48:20
【问题描述】:
您好,我是 Haskell 的新手,遇到了一个有趣的问题,但我不确定如何解决它。我将仅向您展示问题的两个部分作为示例。
问题是我们要输入一个介于 13 到 15 位之间的数字。 然后从该数字中删除最后一个数字。例如 19283828382133 应该输出完全相同的数字,只是没有最后的 3 1928382838213。
然后这些数字中的每个奇数(不是数字)都将加倍。所以你会得到 2,9,4,8,6 等
到目前为止,这是我的代码。正如您从代码中看到的那样,我已经能够单独完成这两个部分(工作),但我不确定如何将它们加在一起。
lastdigit :: Integer -> Integer -- This Function removes the last number
lastdigit x = x`div`10
doubleOdd (x:xs) = (2*x):(doubleEven xs) -- This function doubles every odd digit not number.
doubleOdd [] = []
doubleEven (x:xs) = x:(doubleOdd xs)
doubleEven [] = []
因此,为了进一步解释我正在尝试构建的程序,我将首先完成输入 13 到 15 位数字的步骤。然后它将首先删除最后一个数字,然后自动进入下一步将每个奇数(不是数字)加倍。谢谢
【问题讨论】:
-
但是如果奇数位大于等于5,那会怎样呢?此后比“新”位数大于 10。
-
这实际上是问题的下一部分。其中,如果你得到 10,它就会变成 1,因为 10 是 1 + 0,这 = 1。如果你得到类似 14 的东西,它就会变成 5,因为 1 + 4 = 5
标签: haskell