# Ruby 1.8에서테스트
# 유명해진지 조금 된 셀프넘버 문제
# 1 이상이고 5000 보다 작은 모든 셀프 넘버들의 합을 구하라
def d(n)
ret = n
while n > 0
ret += (n % 10)
n /= 10
end
return ret
end
# i가 어떤수의 generator인가를 계산을해가지구
# i가 generate를 하는 수인 generated는 self number가 아님
# 범위안에 있는수면은 tab에 false 넣음
# bound.times 만을 d에 호출하면 되는 이유는
# generated 보다 큰 generator는 없기 때문
def sum_of_self_number(bound)
tab = Array.new(bound, true)
bound.times do |i|
generated = d(i)
(tab[generated] = false) if (generated < bound)
end
sum = 0
bound.times do |i| ((sum += i) if tab[i]) end
return sum
end
require 'test/unit'
class TestSumOfSelfNum < Test::Unit::TestCase
def test_method
assert_equal(1227365, sum_of_self_number(5000))
end
end
# 유명해진지 조금 된 셀프넘버 문제
# 1 이상이고 5000 보다 작은 모든 셀프 넘버들의 합을 구하라
def d(n)
ret = n
while n > 0
ret += (n % 10)
n /= 10
end
return ret
end
# i가 어떤수의 generator인가를 계산을해가지구
# i가 generate를 하는 수인 generated는 self number가 아님
# 범위안에 있는수면은 tab에 false 넣음
# bound.times 만을 d에 호출하면 되는 이유는
# generated 보다 큰 generator는 없기 때문
def sum_of_self_number(bound)
tab = Array.new(bound, true)
bound.times do |i|
generated = d(i)
(tab[generated] = false) if (generated < bound)
end
sum = 0
bound.times do |i| ((sum += i) if tab[i]) end
return sum
end
require 'test/unit'
class TestSumOfSelfNum < Test::Unit::TestCase
def test_method
assert_equal(1227365, sum_of_self_number(5000))
end
end

