2013-01-14 48 views
2

嗨我写的ocaml的方案和具体的数字我无法弄清楚如何看待的一个intocaml的看着一个int

具体数字这么说,例如,我们有

let a = 405;; 

我想看看第一个数字4或第二个数字0.我该如何做到这一点?我正在考虑把它变成一个字符串,看着字符,但我觉得应该有另一种方式去做。

回答

4

你可以写一个递归函数从数中提取所有的数字:

(* Assuming n is a non-negative number *) 
let digits n = 
    let rec loop n acc = 
     if n = 0 then acc 
     else loop (n/10) (n mod 10::acc) in 
    match n with 
    | 0 -> [0] 
    | _ -> loop n [] 

一旦你有数字

# digits 405;; 
- : int list = [4; 0; 5] 

一个列表,你可以通过使用一些List功能得到任何数字。

5

(我会说这是一个普遍的规划问题,而不是一个OCaml的问题。)

若要位ķ从0在正确的编号,您的10 k电力划分(/),然后取结果mod 10.

从左边数字编号使这个问题更难。如果必须这样做,您需要知道数字的位数,您可以从日志库10中获得该位数。

将字符串转换为字符串(或建议,以数字列表)。这基本上完成所有数字的所有分割和模式。如果你没有做很多这些转换,它会足够快(恕我直言)。