본문 바로가기
SW Programming/알고리즘

(알고리즘) (문제풀이) 어떤 수의 각 자릿수를 제곱해서 모두 더하기를 반복

by Crystal.k 2020. 10. 6.

어떤 수의 각 자릿수를 제곱해서 모두 더하고, 전에 나왔던 수가 다시 나올 때까지 같은 과정을 거듭합니다.
그러면 아래의 예와 같은 일련의 수를 얻습니다.

44 → 32 → 13 → 10 → 1 → 1
85 → 89 → 145 → 42 → 20 → 4 → 16 → 37 → 58 → 89

위에서 알 수 있듯이 일단 1 또는 89에 도달하면 그 다음부터는 정해진 수들을 무한히 반복하게 됩니다.
정말 신기한 것은 어떤 숫자로 시작해도 결국에는 1이나 89에 도달한다는 사실입니다.

그러면 1천 미만의 자연수 중에서, 이런 과정을 거쳐 89에 도달하는 수는 몇 개나 있습니까?

 

count = 0
for input in range(1,1000):
    pre=0
    
    while(input!=pre):
        sum=0
        s=str(input)
        length=len(s)
        
        for j in range(0,length):
            sum += int(s[j])**2
         
        if sum==1 :
            break
            
        if sum==89:
            count+=1
            break
            
        pre = input
        input=sum
        
print(count)​

 

ideone.com/sIL8IG

반응형

댓글