返回数字的奇数位之和

Sum*_*ana 5 racket

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

\n\n
(define sumOddDigits\n     (lambda (n)\n       (if (= n 0)\n           0\n
Run Code Online (Sandbox Code Playgroud)\n\n

测试用例:

\n\n
(sumOddDigits 0) \xe2\x86\x92 0\n(sumOddDigits 4) \xe2\x86\x92 0\n(sumOddDigits 3) \xe2\x86\x92 3\n(sumOddDigits 1984) \xe2\x86\x92 10\n
Run Code Online (Sandbox Code Playgroud)\n

dvv*_*vrd 0

您可以使用一个功能循环有效地完成此操作:

(define (sumOddDigits n)
  (let loop ([n n])
    (cond [(zero? n) 0]
          [else
           (let-values ([(q r) (quotient/remainder n 10)])
             (+ (if (odd? r) r 0)
                (loop q)))])))
Run Code Online (Sandbox Code Playgroud)