1629번 - 곱셈
코드를 아래와 같이 짰습니다.
근데 calc 함수와 temp를 int형이 아닌 long long 으로 하면 정답이 됩니다.
근데 제 생각에는 return 할때
모든 변수를 각각 %C 해주기 때문에 return 값으로는 항상 int형 변수가 넘어가는 것 아닌가요?
예를 들어
return ((temp%C)*(temp%C))%C;
에서 결과값은 int 형이지 않나요? C가 int형 변수이기 때문에..
중간 계산 과정에서 (temp%C)*(temp%C) 이게 int 형을 넘을 수 있기 때문에 틀리게 되는건가요?
그래서 궁금한 점은 return 될때 저 값을 담는 변수가 없는데 , 이 때 결과값이 중요한것인지, 결과 과정이 중요한 것인지 알고 싶습니다.
결과 뿐만이 아니라 계산의 중간 과정 하나 하나에도 모두 자료형이 있습니다. 이 경우, 두 수를 곱하는 연산의 결과에서 이미 오버플로가 발생하기 때문에 그 후에 뒤늦게 나머지를 적용해도 소용이 없습니다.
음 그렇군요
그렇다면 (temp%C)*(temp%C) 같이 중간값들은 어떤 자료형을 따라가게 되나요?
아 그렇게 되는군요... 감사합니다! 큰 도움이 됐습니다.
댓글을 작성하려면 로그인해야 합니다.
his130 6년 전
코드를 아래와 같이 짰습니다.
근데 calc 함수와 temp를 int형이 아닌 long long 으로 하면 정답이 됩니다.
근데 제 생각에는 return 할때
모든 변수를 각각 %C 해주기 때문에 return 값으로는 항상 int형 변수가 넘어가는 것 아닌가요?
예를 들어
return ((temp%C)*(temp%C))%C;
에서 결과값은 int 형이지 않나요? C가 int형 변수이기 때문에..
중간 계산 과정에서 (temp%C)*(temp%C) 이게 int 형을 넘을 수 있기 때문에 틀리게 되는건가요?
그래서 궁금한 점은 return 될때 저 값을 담는 변수가 없는데 , 이 때 결과값이 중요한것인지, 결과 과정이 중요한 것인지 알고 싶습니다.