shg789   9년 전

이거 절대값 구하는거 아닌가요?

근데 왜 틀리다고 나오져?


JAVA로 했는데도 틀리고

C언어로 abs써봤는데도 안되고;


뭐가 문젠지 모르겠네요..

sujin   9년 전

연산 결과 int형의 범위를 넘어가는 경우가 있기 때문입니다.

shg789   9년 전

-sujin님-

님 말씀대로 자세히 보니 결과값이 int형 범위가 넘어가더라구요.. 그래서 결과값을 float로 고쳐서 출력해줬는데.. 답은 잘 나옵니다..

그런데 이번에도 틀렸다는데... 왜그런건지요?


#include <stdio.h>

int main(){

int N,M;

float p;

scanf("%d",&N); scanf("%d",&M);

p=(float)N-(float)M;

if(p<0) printf("%.0f\n",(p*-1));

else printf("%.0f\n",p);

return ;

}

baekjoon   9년 전

float은 실수형 자료구조라서 정수를 정확하게 담을 수 없습니다. long long을 사용하세요.

79brue   8년 전

저도 long long 써야 맞았다죠...

아마도 최대 차가 40,000,000,000까지 가능해서 그런 것 같습니다.

double 쓰셔도 되고요.

double은 워낙 최대치가 커서...

shg789   8년 전

#include <stdio.h>
#include <stdlib.h>

int main(){

int N,M;
long long p;
scanf("%d",&N); scanf("%d",&M);

p=N-M;
printf("%d\n",abs(p));

return 0;

}

p를 long long으로 했는데도 범위가 초과되서 안찍히는데요..ㅠㅠ

Visual C++ 2010인데.. 혹시 따로 설정해야 되거나 그런게 있나요?

79brue   8년 전

입력과 출력을 받을 때 %d 대신에 %lld로 해 보세요

baekjoon   8년 전

@79brue

큰 수가 필요할 때, double 사용하지 마세요. 실수형 자료구조라서 정확한 값이 저장되지 않습니다. 이 문제는 맞을 수도 있겠지만, 다른 문제는 틀릴 수도 있어요. 복불복입니다.

shg789   8년 전

@79brue

님 말씀대로 N,M 입력 때 lld로 받고..

p출력 때 lld로 출력했는데도.. 범위가 초과되서 그런지 제대로 안뜨네요 ㅠㅠ

제가 실수 한게 있나요? . .??ㅠㅠ

#include <stdio.h>
#include <stdlib.h>

int main(){
long long N,M,p;

scanf("%lld",&N); scanf("%lld",&M);

p=N-M;
printf("%lld\n",abs(p));

return 0;
}

79brue   8년 전

저도 abs 썼을때는 오류가 나던데...

한번 삼항연산자로 해결해 보세요.

abs(p) 자리에 n>m ? n-m : m-n을 넣어 보세요.

shg789   8년 전

오 ~~ 됐네요 ^^ 감사합니다!!

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