-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproject-huge-numbers
54 lines (44 loc) · 2.33 KB
/
project-huge-numbers
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
;;; Create a program that spells out large numbers.
(define thousands '(thousand million billion trillion quadrillion quintillion sextillion septillion octillion nonillion decillion))
(define tens '(ten twenty thirty fourty fifty sixty seventy eighty ninety))
(define teens '(eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen))
(define ones '(one two three four five six seven eight nine zero))
(define (pick-ones number)
(if (equal? number 0)
(se (item 10 ones))
(se (item number ones))))
(define (pick-teens number)
(item (last number) teens))
(define (pick-tens number)
(se (item (first number) tens) (if (> (last number) 0)
(pick-ones (last number))
'())))
(define (pick-hundred number)
(cond ((equal? (count number) 3) (se (pick-ones (first number)) 'hundred (pick-hundred (bf number))))
((equal? number "") '())
((> number 19) (se (pick-tens number)))
((> number 10) (se (pick-teens number)))
((= number 10) (se 'ten))
((= number 0) '())
(else (pick-ones number))))
(define (number-name-helper n number)
(cond ((equal? n 0) (pick-hundred number))
((>= n 1) (se (pick-hundred ((repeated bl (* 3 n)) number))
(item n thousands)
(number-name-helper (- n 1) (cond ((equal? (remainder (count number) 3) 0) ((repeated bf 3) number))
((equal? (remainder (count number) 2) 0) ((repeated bf 2) number))
(else (bf number))))))
(else '())))
(define (number-name number)
(number-name-helper (if (> (count number) 3)
(cond ((> (count number) 27) 9)
((> (count number) 24) 8)
((> (count number) 21) 7)
((> (count number) 18) 6)
((> (count number) 15) 5)
((> (count number) 12) 4)
((> (count number) 9) 3)
((> (count number) 6) 2)
((> (count number) 3) 1))
0)
number))