找到方案中数字的数字的平方和

时间:2017-03-22 17:29:04

标签: scheme racket

我需要在scheme中编写一个函数来计算平方数字的总和。

ex - (sum-of-digits 130)
    > 10

这是我的功能。

(define (sum-of-digits x)
      (if (= x 0) 0
          (+ (modulo x 10) (sum-of-digits (/ (- x (modulo x 10)) 10)))))
某些数字并不起作用。当我输入(数字和130)时,它返回4.我该如何解决这个问题?

另外我需要用这个函数来找到0,1,4,16,20,37,42,58,89,145

的停止数字
ex :- (stop? 42)
 #t

(stop? 31)
 #f

我怎样才能使用上面的和位函数和?

1 个答案:

答案 0 :(得分:1)

你忘了实际平方每个数字,并且有更简单的方法来获得商:

(define (sum-of-digits x)
  (if (= x 0) 
      0
      (+ (sqr (modulo x 10))
         (sum-of-digits (quotient x 10)))))

问题的第二部分:

(define (stop? x)
  (let ((sum (sum-of-digits x)))
    (if (member sum '(0 1 4 16 20 37 42 58 89 145)) #t #f)))