本文介绍了返回一个数的奇数之和的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
对于类,我必须编写一个函数,它接受正整数 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 '()))
这篇关于返回一个数的奇数之和的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!