heungjun92   4년 전


안녕하세요.

1834번 문제를 푸는 도중

입력값 unsigned int N 에 양의 정수를 곱하여

unsigned long long 으로 값을 출력하였는데,

결과가 틀렸다고 나왔습니다.

unsigned int N 을 unsigned long long으로 변경한 후에는

결과가 정답으로 나왔는데,

입력 값이 2,000,000만 이하여서 unsigned int 로도 입력을 받을 수 있는 상황이었습니다.

왜 이런 결과가 발생하는지 혹시 알려주실 수 있으신 분, 계실까요?

dannydino   4년 전

unsigned long long result = N*(N+1)/2; 에서 N이 unsigned int 일 경우 우변을 계산한 결과의 자료형이 unsigned int가 됩니다. = (N*(N+1)/2 계산이 unsigned int 범위를 넘어가서 잘못된 값을 가르키게됩니다.)

결국 그 값이 unsigned long long result변수에 들어가게 되어 결과적으로 잘못된 값이 출력됩니다

heungjun92   4년 전

dannydino //
많은 도움이 되었습니다.
감사합니다!

adfio1234   4년 전

혹시 

unsigned long long result = N*(N+1)/2;
result = result * (N-1);

이거 어떻게 생각해낸건지 알려주실수있나요?

heungjun92   4년 전

adfio1234 // 

등차수열 입니다.

댓글을 작성하려면 로그인해야 합니다.