Project Euler - Problem16 └ Project Euler

Problem 16


03 May 2002

215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.
What is the sum of the digits of the number 21000?


문제 16.
2의 1000승을 계산한 후 결과값의 각 자리의 숫자의 합을 구하라.


erlang code.

-module( problem16 ).
-export( [calc/0] ).

calc() ->
        sum_of_digits( i_pow( 2, 1000 ) ).

% 각 자리의 합을 구한다.
sum_of_digits( N ) ->
        L = erlang:integer_to_list( N ),
        lists:sum( L ) - ( length(L) * 48 ).

% N의 M승
i_pow( N, 1 ) ->
        N;
i_pow( N, M ) ->
        N * i_pow( N, M-1 ).



전에 n의 m승을 구하는것에 대해서 pow 함수를 쓰면 된다고 하신 분이 계셨는데요..,

erlang의 pow 함수는 실수값을 반환해서 말이죠...  실수->정수 변환이 귀찮아서

그냥 쓰던함수를 그대로..


sum_of_digits 함수는 말 그대로 각 자리의 수를 더하는 함수입니다.
방법이 좀 괴악하긴 하지만..

일단 문자열로 변환한 다음에 각 자리를 lists:sum 함수를 이용해 더하고
length * 48을 빼서 값을 구합니다..(ascii code의 '0' 이 48 이기 때문에..)

덧글

댓글 입력 영역


통계 위젯 (블랙)

01
9
53794

이 이글루를 링크한 사람 (블랙)

11