首页 > 解决方案 > 编写一个程序,根据一个数字确定其位数的平均值

问题描述

我必须制作一个平均数字位数的程序,但这对我来说是不可能的,尤其是除法(余数)的模块。

我可以做什么?

(define (digitos number)
  (cond
  [(and (>= number 1) (< number 11)) 1]
  [else (+ 1 (digitos (/ number 10)))]))

(define (modulo_ n m)
  (cond
    [(real? n) (- n (* (floor (/ n m)) m))]
    [else (remainder n m)]))

(define (sumatoria number)
  (cond
    [(equal? number 0) 0]
    [else (+ (modulo_ number 10) (sumatoria (/ number 10)))]))

(define (promedio number)
  (/ (sumatoria number) (digitos number)))

;(promedio 40) ;3

标签: racket

解决方案


更新:您的问题重复 了如何计算位数? 计算列表中的数字 Racket 返回数字的奇数位之和 将数字 转换为数字列表

; only consider nature number 0,1,2,3,...
; if you want input Decimal use number->string

(define (cut-right-digit n)
  (/ (- n (remainder n 10)) 10))

(define (sum-each-digit n result)
  (cond
    [(<= 0 n 9)
     (+ result n)]
    [else 
     (sum-each-digit (cut-right-digit n) (+ result (remainder n 10)))]))

(define (digits n result)
  (cond
    [(<= 0 n 9)
     result]
    [else
     (digits (cut-right-digit n) (+ 1 result))]))

(define (avg-digits n)
  (/ (sum-each-digit n 0) (digits n 1)))

;;; TEST

(avg-digits 0) ; 0
(avg-digits 1) ; 1
(avg-digits 11111) ; 1
(avg-digits 10203040506789) ; (/ 55 14)
(avg-digits 101001) ; 1/2


推荐阅读