해결된 질문
작성
·
175
0
int main()
{
int N, a, b, tmp, cnt = 0;
cin >> N;
vector<int> fac(N);
for (int i = 0; i < N; i++) {
fac[i] = N - i;
}
int i = 0;
while(1) {
if (i<N) {
a = fac[i];
b = fac[i + 1];
tmp = (b * a);
while (tmp % 10 == 0) {
cnt++;
tmp = tmp / 10;
}
i = i + 2;
}
else
break;
}
cout << cnt;
return 0;
}
답변 2
1
문제점이 두가지 있습니다.
첫 번째는 N값으로 홀수가 입력되면 while (tmp % 10 == 0) 에서 무한루프에 빠집니다. 만약 N=5가 입력되면 둘씩 짝을 이루며 처리하다가 마지막에 i=4일때 a=1되고 b는 fac[i+1]가 index out of range 에러가 되어 b에 0이 대입됩니다(gcc 컴파일러 기준). C언어는 index out of range를 에러처리 하지 않습니다. 프로그래머가 조심해야 합니다. b가 0이면 tmp가 0이 되어 while (tmp % 10 == 0) 문이 무한루프에 빠지는 것입니다.
두번째는 둘씩 곱한 다음 0을 찾는 방법은 정답을 찾는 해법이 아닙니다. 50*49*48*47 값을 위에 코드대로 두개씩 짝지어 곱한 후 0의 개수을 찾으면 1개 발견됩니다. 하지만 50*49*48*47 계산을 한 결과는 일의 자리부터 연속으로 0이 2개입니다.
0