100! 의 자릿수를 모두 더하면?

사이트 이름 - 문제 20번

n! 이라는 표기법은 n × (n − 1) × ... × 3 × 2 × 1을 뜻합니다.

 

예를 들자면 10! = 10 × 9 × ... × 3 × 2 × 1 = 3,628,800 이 되는데, 여기서 10!의 각 자릿수를 더해 보면 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27 입니다.

 

100! 의 자릿수를 모두 더하면 얼마입니까?

해결 방법

fact = 1
for i in range(1, 101):
    fact *= i
    
s = 0
for i in str(fact):
    s += int(i)
    
print(s) # 648

1부터 100까지 모두 곱한 결괏값을 문자형으로 변경한다. 문자형으로 변경하면 리스트로 처리할 수 있어서 각 자리를 숫자형식으로 다시 바꾸면 더할 수 있다.

처음에는 팩토리얼 재귀함수를 만들어 풀었는데 그냥 루프문으로 돌렸다.

팩토리얼로 풀면 메모리를 많이 먹는다는 이야기를 들어서...

팩토리얼로 푼 코드

def factorial(x):
    if x < 2:
        return 1
        
    return x * factorial(x - 1)
    
    
result = str(factorial(100))
    
s = 0
for i in str(result):
    s += int(i)
    
print(s) # 648

+ Recent posts