2017-03-01 3 views
0

整数引数をとり、番号の範囲内の位置にある整数を返す関数を作成しようとしています。例えば。リストを3つのグループと記号に分割する

(番号2135567667)

「(20億1.35億567000 667)

私は商と剰余を右から左に3者のグループに整数を分割すると考えました。出力センテンス内の適切なシンボルを差し挟むするには、文

「(千百万億兆千兆)

を使用しています。

(番号1000000)

「(100万)

又は

(十億一)

:しかしグループ全体は以下のようなゼロであろう場合があります

10億1

問題を解決する方法がありますか?または、グループとその名前がゼロの場合は、どのように除外できますか?あなたがリストを構築するために取ることができ

(define 1to19 '(one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen)) 
(define multiple '(twenty thirty forty fifty sixty seventy eighty ninety)) 

(let loop ((n n) (units thousands) (acc '())) 
     (cond 
     ((= n 0) acc) 
     ((< 0 n 20) (cons (list-ref 1to19 (- n 1)) acc)) 
     ((< n 100) (cons (list-ref multiples (- (quotient n 10) 2)) 
          (loop (remainder n 10) '() acc))) 
     ((< n 1000) (loop (quotient n 100) 
          '() 
          (cons 'hundred (loop (remainder n 100) '() res)))) 
+0

を、あなたは '()= 0 GRP(あれば)'グループを省略することができます。 –

答えて

1

一つのアプローチは、がグループに番号を分割しながら、単位に追加することです。

(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)) 

してから:たとえば、ラケットであなたが持つことができる実行可能なアプローチのように聞こえる

> (number 2135567667) 
'(2 billion 135 million 567 thousand 667) 
> (number 1000000) 
'(1 million) 
> (number 1000000001) 
'(1 billion 1) 
+0

ありがとうございました。私も1000未満の部分を変換するために、数字1〜19と10の倍数の単語を含む2つの追加のユニット識別子を含むことを考えていました。あなたのメソッドと一緒にこれがどのように実装されるのかわかりませんが、リスト(編集を参照)。 – Silverfin

+0

私はあなたの他の質問[ここ](https://stackoverflow.com/questions/42660997/converting-numbers-to-english-letter-list/42686286#42686286)への回答としてこのような機能を追加しました。それが役に立てば幸い :) – assefamaru

関連する問題