Найти наибольшее число, получаемое левыми сдвигами цифр натурального числа - Lisp

Узнай цену своей работы

Формулировка задачи:

Задача из форума Turbo Pascal: Прочитать натуральное число а, которое может содержать до 100 цифр Найти наибольшее число, получаемое левыми сдвигами цифр натурального числа.

Решение задачи: «Найти наибольшее число, получаемое левыми сдвигами цифр натурального числа»

textual
Листинг программы
(define (prepare-data n (str (string->list (number->string n))))
  (let loop ((data str) (len (length str)) (acc '()))
    (if (zero? len)
        acc
        (loop (append (rest data) (list (first data))) (sub1 len) (cons data acc)))))
 
(define (main n)
  (string->number (first (sort (map list->string (prepare-data n)) string>?))))
 
;> (main 1234)
;4123
;>

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы