且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

返回一个数的奇数之和

更新时间: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 '()))