Как я могу написать функцию в Racket, которая дополняет числа без условий? - PullRequest
0 голосов
/ 12 мая 2018

Мне нужно написать функцию, которая потребляет Nat и возвращает Str, дополненный тремя цифрами.

Пример:

(pad3 7) => "007"
(pad3 42) => "042"
(pad3 245) => "245"
(pad3 3141592) => "314"

Любые советы?

Ответы [ 2 ]

0 голосов
/ 13 мая 2018

Три наиболее значимые цифры

  1. Преобразовать число в строку
    • Использование number->string
  2. Найдите длину строки
    • Использование string-length
  3. Найдите число нулей для добавления
    • Используйте (max 0 (min 3 (- 3 n))), где n - длина строки
  4. Используйте make-string, чтобы получить строку с нулями
  5. Добавить нулевую строку к string-append
  6. Используйте substring, чтобы выделить первые 3 символа.

Три наименее значащие цифры

  1. Получить три младшие значащие цифры

    • Использование (remainder _ 1000)
  2. Добавить 1000 число

    • теперь у вас есть 1xxx, где xxx - желаемый вывод
  3. Используйте integer->string, чтобы получить строку.

  4. Используйте substring для удаления префикса 1.

0 голосов
/ 12 мая 2018

В Racket вы можете использовать ~r для преобразования числа в строку при управлении заполнением, минимальной шириной и т. Д. Следующим образом:

(~r 7 #:min-width 3 #:pad-string "0")
=> "007"

Но, так как вы также хотите установить максимальную ширину, которая обрезает любые цифры после третьей позиции слева, вы можете применить substring к вновь преобразованной строке следующим образом:

(substring (~r 3141592 #:min-width 3 #:pad-string "0") 0 3)
=> "314"

Вот пример pad3 реализации:

(define (pad3 num)
  (substring (~r num #:min-width 3 #:pad-string "0") 0 3))
...