jh5611   8년 전

답은잘나오는거같은데 범위를 초과했을경우가 문제일까요?

근데  문제서 말하는 VC가 무엇일까요,..?

ntopia   8년 전

아마 Visual C++ 얘길텐데, 이건 불필요한 얘기인 것 같네요. 정확하게 얘기하려면 저게 아니라 architecture를 얘기해야 할텐데 ..

여튼 signed int 범위라고 했으니 보통은 -2147483648 ~ 2147483647 을 말합니다.

이대로 저 코드를 돌리면 어떤 테스트케이스에선 overflow가 나겠죠.

long long 이라는 type을 쓰면 int범위보다 더 큰 정수를 저장할 수 있습니다.

scanf, printf 할 때는 %lld를 쓰면 됩니다.

jh5611   8년 전

#include <stdio.h>
long long num, num1, len, tmp;
int main(){ 
 scanf("%d%d", &num,&num1);
 if (num > num1){
  tmp = num;
  num = num1;
  num1 = tmp;  
  }
 
  len = num1 - num + 1;
 
 if (len % 2 == 0){
  printf("%lld", ((num + num1))*(len / 2));
 }
 else{
  printf("%lld", (((num + 1) + num1)*((len - 1) / 2)) + num);
 }
 return 0;
}

요렇게만 수정해봤는데 이것도 틀리다는데 ... 다른부분에서 잘못된걸까요?

어차피 scanf 받는부분은 int 범위내니까 상관없을테고 더하는과정에서만 문제가 안생기면되는거같은데 뭐때문에 틀린지를 잘모르겠습니다.ㅠ.ㅠ

ntopia   8년 전

scanf 할 때도 %lld로 쓰셔야 합니다.

그냥 %d로 입력받으면 음수를 입력받을 때 의도치않은 결과가 발생합니다.

jh5611   8년 전

아하 감사합니다 !!!


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