![]() |
|
|
| Subject:
DRScheme problem need quick answers to see, if I understand the way to answer !
Category: Computers > Programming Asked by: kenobob-ga List Price: $20.00 |
Posted:
19 Oct 2005 22:38 PDT
Expires: 18 Nov 2005 21:38 PST Question ID: 582452 |
Please include a comment with each solution indicating the amount of time spent solving it. Note: Using the two access functions of (units-digit) and (all-but-units-digit) and/or substitution or recursion functions. (decimal-length n) ; returns the number of digits in the number. EXAMPLE: (decimal-length 348567) --> 6 (ith-digit n i) ; returns digit which is the ith from the left. EXAMPLE: (ith-digit 471835629 4) --> 8 (leading-digit n) ; returns the first digit. EXAMPLE: (leading-digit 5394) --> 5 (occurance d n) ; returns the number of times digit d occurs in n. EXAMPLE: (occurance 6 549457654987587654655478563) --> 4 (digit-sum n) ; returns the sum of the digits in n. EXAMPLE: (digit-sum 2354) --> 14, (digit-sum 8) --> 8 (digital-root n) ; returns the result of repeatedly applying digit-sum until the result is a single digit. EXAMPLE: (digital-root 341943) --> (via 3+4+1+9+4+3=4, then 2+4=6) (backwards n) ; returns the digits in reverse order. You do not need to handle leading or trailing zeros. For this problem you may use multiplication. EXAMPLE: (backwards 329145) --> 541923 |
|
| Subject:
Re: DRScheme problem need quick answers to see, if I understand the way to answe
Answered By: leapinglizard-ga on 20 Oct 2005 00:56 PDT |
Dear kenobob,
Here you go.
(define (decimal-length n) ; 4 minutes
(if (< n 10)
1
(+ 1 (decimal-length (all-but-units-digit n)))))
(define (ith-digit n i) ; 3 minutes
(if (= i (decimal-length n))
(units-digit n)
(ith-digit (all-but-units-digit n) i)))
(define (leading-digit n) ; 1 minute
(ith-digit n 1))
(define (occurrence d n) ; 6 minutes
(+ (if (= (units-digit n) d)
1
0)
(if (< n 10)
0
(occurrence d (all-but-units-digit n)))))
(define (digit-sum n) ; 2 minutes
(+ (units-digit n)
(if (< n 10)
0
(digit-sum (all-but-units-digit n)))))
(define (digital-root n) ; 1 minute
(let ((x (digit-sum n)))
(if (< x 10)
x
(digital-root x))))
(define (backwards n) ; 8 minutes
(letrec ((backward
(lambda (n part)
(if (= n 0)
part
(backward (all-but-units-digit n)
(+ (* 10 part) (units-digit n)))))))
(backward n 0)))
If you don't already have definitions for units-digit and
all-but-units-digit, you can insert the following before all the above
definitions.
(define (units-digit x)
(modulo x 10))
(define (all-but-units-digit x)
(/ (- x (units-digit x)) 10))
Regards,
leapinglizard |
|
| There are no comments at this time. |
If you feel that you have found inappropriate content, please let us know by emailing us at answers-support@google.com with the question ID listed above. Thank you. |
| Search Google Answers for |
| Google Home - Answers FAQ - Terms of Service - Privacy Policy |