2013-01-14 84 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中獲得該位數。

將字符串轉換爲字符串(或建議,以數字列表)。這基本上完成所有數字的所有分割和模式。如果你沒有做很多這些轉換,它會足夠快(恕我直言)。