我需要在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
我怎样才能使用上面的和位函数和?
答案 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)))