숫자의 입력을 부분적으로 번역 된 단어 출력으로 변환하는 아래 함수가 있습니다.숫자를 영문자리스트로 변환
제품 및 지수를 사용하여 숫자를 그룹으로 나누면서 숫자 표현을 추가합니다. 예를 들어
: 완전히뿐만 아니라 적은 1000보다 그 숫자를 변환하여 내 문제를 완료하기 위해 노력하고
(number-name 87969087) -> '(87 million 969 thousand 87)
(number-name 1000000) -> '(1 million)
임. 임이 1000보다 작은 함수를 구현하려고 시도하면 목록이 생성되는 동안 그 작은 숫자가 표시됩니다. 함께 :
;; for less than 1000
; state words for 1-19
(define baseNumbers '(one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen))
및
; state words for multiples of ten
(define multiples '(twenty thirty forty fifty sixty seventy eighty ninety))
그래서
(number-name 1110) -> '(one thousand one hundred ten)
그것의 방법으로 그렇게하여도 0으로 표시 할 0의 입력을 표시하는 방법으로 올라오고 어렵다 입력이 0
이외의 경우 한 제로는 표시되지 않습니다 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
당신은 3 자리로 수를 떨어져 파괴함으로써 기호 목록에 정수를 번역 할 수 있습니다(define (number n)
(define units '(thousand million billion trillion quadrillion))
(define (nsplit n units acc lst)
(define q (quotient n 1000))
(define r (remainder n 1000))
(if (zero? n) lst
(cond [(zero? acc)
(if (zero? r)
(nsplit q units (add1 acc) lst)
(nsplit q units (add1 acc) (cons r lst)))]
[(zero? r)
(nsplit q (cdr units) acc lst)]
[else
(nsplit q (cdr units) acc (cons r (cons (car units) lst)))])))
(nsplit n units 0 empty))