펙토리얼에 관한 문제

정보올림피아드준비 | 2013.06.08 01:16 | Posted by 엔드 And&End

정보올림피아드 엔 알고리즘 이라는 사이트를 알고계신가요?


이 사이트에선 실전 문제를 풀어볼 수 있을뿐만아니라 기초부터 할 수 잇더군요


체점까지 해주어서 아주 편리한 것 같습니다.

http://www.jungol.co.kr/site/


이 사이트이고요

한번 들어가 보시는것도 좋습니다.



-------------------------------------------------------------------------------------


오늘 푼 문제

http://www.jungol.co.kr/prog/Hanal/hanalView.php?qs_code=1048


이문제입니다


펙토리얼의 값을 구해서 뒤에 몇자리의 0이 붙었나 알아보는 문제죠


일단 펙토리얼을 구하는방법은 제귀함수를 이용하였습니다.


int Fac(int n)

{

if(n==0)

return 1;

else return n * Fac(n-1);

}



를 이용하였습니다.


펙토리얼은 


n! 로 나타내어서


n 이 3이라고 했을때


3*2*1 이 되는것입니다.


이것은 3 *  (3-1) * 

{(3-1)-1} 이 되는것이지요


또한 0! 는 1입니다.


수학적 증명은 따로하지 않겠습니다 


그리고 그 펙토리얼 값으로 0이 뒤에(1의자리부터) 몇게나 연속되어 있느냐를 찾아야겠죠


저는 이런방법으로 햇습니다


while(res%10==0) //10으로 나눠지나

{

g++;

res/=10; //나눠지면 나눠야지

}


%연산자(n%m 일때 n 을 m으로 나눴을 때 나머지)를 이용하여서 10으로 나눠지는가(나머지가 0이라면 나눠지는것이고 그렇다는건 1의자리에 0이 있다는거) 나눠진다면 10으로 나눠서 다시 계산하는것이죠 

그리고 그만큼 g에 1씩 더해서 몇게가 있나 확인했습니다




파일 입출력을 오늘 처음해봤습니다...


아직어렵군요 하지만 대부분의 문제가 파일입출력을 요구하고있으므로 더 공부해야되겠습니다



저작자 표시 비영리 동일 조건 변경 허락
신고

'정보올림피아드준비' 카테고리의 다른 글

오늘 정보올림피아드 시대회  (0) 2013.06.23
펙토리얼에 관한 문제  (0) 2013.06.08
정보올림피아드 준비과정  (0) 2013.06.07