apjw6112   5년 전

이칙연산에서 그냥 되는 코드 해서 max했는데 틀렸습니다.

제가 지나친 또 다른 규칙이 있는 것 같은데 찾질 못하겠어요

어떻게 해야 되나요?

kimsy96   5년 전

답은 int형을 안넘는다고 했는데

그 계산과정에서는 오버플로우가 날거같네요 

apjw6112   5년 전

이렇게 했는데도 안되는데요?

제가 뭘 빠뜨린건가요?

djm03178   5년 전

a*b라는 식은 int형입니다. 그래서 여기에서 이미 오버플로우가 발생합니다. 뒤늦게 unsigned long long에 대입해도, 이미 손실된 부분은 돌아오지 않습니다.

apjw6112   5년 전

그런데 처음부터 unsigned long long int형으로 해도 안되는데요?

kimsy96   5년 전

좀더 정보과학적으로 정확한 대답을 드리고 싶어서 찾아봤는데 못찾겠군요..

i=a*b/c; j=a/b*c;

이부분에서 여전히 오버플로우가 날거같습니다.

그냥 정신건강에 편하게 모두 long long 형 변수를 선언하고 질문자님의 논리대로 풀면 답은 나옵니다.

일단 이코드의 문제점이 몇개 있는데 unsinged 정수를 입력받는 서식문자가 %d가 아닌걸로 알고있습니다(%x였나..기억이 가물가물하네요 레퍼런스를 찾아보시길)

그리고 백준저지에서 return 0를 하지않으면 틀렸다고 뜹니다.

그리고 c언어로 제출하셨던데 컴파일 에러라고 뜨지않던가요? 

stdio.h선언없이 printf scanf사용이 가능하군요 어째든

요약하자면

틀린이유가 

  1. 부호없는 정수형 변수를 입력받는 서식문자가 틀렸다
  2. 오버플로우가 여전히발생할거같다(->이부분은 조금더 잘아시는분이 답해주시길)
  3. 백준은 return 0 안쓰면 틀린다.

kimsy96   5년 전

%u군요 

apjw6112   5년 전

이렇게요?

kimsy96   5년 전

음..거의다 오시긴했는데

문제에 트릭(?)이있습니다.오차 어쩌고.. a/b*c 요식의 오차를 줄이려면 어떻게 바꿔주면 될지를 고민하시면 될거같네요 

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