данные, используемые глядя на конкретные цифры инт


Эй, ребята, я пишу программу ocaml, и я не могу понять, как смотреть на конкретные цифры int

Так скажем, например, у нас есть

let a = 405;;
Я хочу иметь возможность смотреть на первую цифру, 4, или на вторую, 0. Как я могу это сделать? Я подумывал о том, чтобы превратить его в веревку и посмотреть на символы, но мне кажется, что должен быть другой способ сделать это.
2 2

2 ответа:

Можно написать рекурсивную функцию для извлечения всех цифр из числа:

(* 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.

(я бы сказал, что это общая проблема программирования, а не проблема OCaml.)

Чтобы получить цифру k, пронумерованную справа от 0, вы делите (/) на K-ю степень 10, а затем берете результат mod 10.

Нумерация цифр слева усложняет эту задачу. Если вам нужно это сделать, вам нужно знать количество цифр, которые вы можете получить из базы данных журнала 10.

Было бы прекрасно преобразовать в строку (или, как предлагает pad, в список цифр). Это в основном делает все деления и моды для всех цифр по порядку. Если вы не делаете много таких преобразований, это будет достаточно быстро (IMHO).