dlftls38   9달 전

답은맞았는데요

밑의 소스코드대로면 답이맞거든요?

그런데

int  m,n;
 scanf("%d%d",&m,&n);
 if(m>n) printf("%lld\n",(long long)(n-1)*2+1);
 else printf("%lld\n",(long long)(m-1)*2);

이부분을

long long  m,n;
 scanf("%d%d",&m,&n);
 if(m>n) printf("%lld\n",(long long)(n-1)*2+1);
 else printf("%lld\n",(long long)(m-1)*2);


또는


long long  m,n;
 scanf("%d%d",&m,&n);
 if(m>n) printf("%lld\n",(n-1)*2+1);
 else printf("%lld\n",(m-1)*2);

으로했을때 틀리다고나오는데 왜죠??????????....................

무슨차이인가요??

입력받을 때도 %lld를 쓰셔야 합니다

plzrun   9달 전

정확히 아는건 아니지만 제 예상으로는...

long long으로 선언하고 %d로 받게되면,

64bit공간을 선언하고 32bit만 scanf()로 받게 되잖아요.

그럼 나머지 32bit는 쓰레기값으로 채워져 있다는건데 (0이 아닌 이상한 값?)

그럼 그런 변수들 가지고 계산하게 되면 이상한 값이 나와서 틀리게 될것 같네요.


어느 환경에서 어떤 컴파일러를 쓰냐에 따라 다르겠지만, 표준에서는 0이 아닌 쓰레기 값이 들어있어서 문제가 될거라 생각됩니다.

(제 컴퓨터에서는 초기화 안해줘도 0으로 초기화 되긴 하는데, 그런 환경에서 컴파일하고 실행해보면 답이 맞게 나왔다고 보일 수도 있겠죠?)

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