ocaml プログラムを書いていますが、int の特定の桁を調べる方法がわかりません。
たとえば、
let a = 405;;
1 桁目の 4 または 2 桁目の 0 を確認できるようにしたいのですが、どうすればこれを達成できますか? それを文字列にして文字を見ようと思ったのですが、別の方法があるといいなと思います。
数値からすべての桁を抽出する再帰関数を作成できます。
(* 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]
いくつかのリスト関数を使用して、任意の数字を取得できます。
(これは OCaml の問題ではなく、一般的なプログラミングの問題だと思います。)
右側の 0 から始まる数字の k を取得するには(/)
、10 の k 乗で割り、その結果を mod 10 にします。
左から数字を数えると、この問題が難しくなります。そうする必要がある場合は、数値の桁数を知る必要があります。これは、10 を底とする対数から取得できます。
文字列 (または、パッドが示唆するように、数字のリスト) に変換しても問題ない場合があります。これは基本的に、すべての桁のすべての分割と変更を順番に実行します。これらの変換をあまり行っていない場合は、十分に高速です(IMHO)。