本文介绍了返回一个数的奇数之和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于类,我必须编写一个函数,它接受正整数 n 并返回方案中 n 的奇数位之和.到目前为止,我的基本情况是,如果 n 等于 0,则为 0.但我不确定如何继续.

For class, I have to write a function that takes positive integer n and returns the sum of n’s odd digits in scheme. So far, I have my base case such that if n equals 0 then 0. But I am not sure on how to continue.

(define sumOddDigits
     (lambda (n)
       (if (= n 0)
           0

测试用例:

(sumOddDigits 0) → 0
(sumOddDigits 4) → 0
(sumOddDigits 3) → 3
(sumOddDigits 1984) → 10

推荐答案

首先通过简单的递归实现得到一个(反转的)数字列表:

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

这篇关于返回一个数的奇数之和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 03:50