更新时间:2022-12-09 20:41:06
首先通过简单的递归实现得到一个(反转的)数字列表:
First get a (reversed) list of digits with simple recursive implementation:
(define (list-digits n)
(if (zero? n) '()
(let-values ([(q r) (quotient/remainder n 10)])
(cons r (list-digits q)))))
然后过滤奇数并求和:
(define (sum-of-odd-digits n)
(apply + (filter odd? (list-digits n))))
注意:(list-digits 0)
返回 '()
但它可以供以后使用.
Note: (list-digits 0)
returns '()
but it is ok for later usage.
更准确的list-digits
迭代实现(按正确顺序生成数字列表):
More accurate list-digits
iterative implementation (produce list of digits in right order):
(define (list-digits n)
(define (iter n acc)
(if (zero? n) acc
(let-values ([(q r) (quotient/remainder n 10)])
(iter q (cons r acc)))))
(iter n '()))