본문 바로가기

Solutions/Mr.K's Solution

UVa 324, PKU 1454. Factorial Frequencies. [판정:AC]


저도 처음에는 Dlbo군의 판정과 같은( 아마 같을 ) In the queue였습니다

그래서
일단 pku에 먼저 질러보자

하는 마음으로 질렀습니다


..
두번의 CE를 받으면서 채점 기준이 좀 까다롭다는 생각을 했습니다

채점을 위해서는 형식을 통일해야한다는건 잘 알지만, 그냥 짜증나더라고요 ㅋㅋㅋㅋ



pku에서 AC받고 uva로 넘어갔더니, 거기에서도 CE가 떠있길래
( uva에 처음 제출한 소스와 pku에 처음 제출한 소스가 동일 )

pku에 마지막으로 제출한 소스를 그대로 uva에 제출했더니 AC가 나오더군요, 다행히 ㄷㄷ





소스를 올릴까 말까 했는데, 일단 올려봅니다

알고리즘은 매우 간단합니다
1~366의 범위를 갖는 자연수 k에 대해 k!의 값을 구해서,
그것의 각 자리수가 무엇으로 이루어져있는가를 보면 됩니다

쉽게 확인할 수 있는 방법중 하나는
k!을 10으로 나눈 나머지를 구해서 세고, k!을 저장하고 있던 변수에는 k!을 10으로 나눈 몫을 구해서 저장하고…

이 짓을 반복하면 k!의 뒤에서부터 확인이 가능합니다


단지 매우 큰 양수를 저장할 자료형이 마땅치 않다는 점이 가장 큰 문제가 되겠습니다만
제게는 UBINT가 있잖아요?
갖다 썼습니다

이 문제에서 필요하지 않은 멤버함수는 싹다 지우고, 멤버변수의 속성을 protected에서 public으로 바꾸고,
그 외에 CE판정을 받은 부분은 살짝 고쳐서 해결했습니다

제 UBINT의 경우, 숫자를 나타내는 부분이 string이므로 앞에서부터 하나씩 세었습니다 -_-;


( 소스는 다소 스압이 있을것 =_= )



이 글을 쓸 때까지 한가지 잊어먹고 있던 것이 하나 있는데,
4번째 줄에 있는 using std::istream; 도 지우고 제출했어야 했는데 그냥 했네요 ㅋㅋㅋ