2420번 - 사파리월드
이거 절대값 구하는거 아닌가요?
근데 왜 틀리다고 나오져?
JAVA로 했는데도 틀리고
C언어로 abs써봤는데도 안되고;
뭐가 문젠지 모르겠네요..
연산 결과 int형의 범위를 넘어가는 경우가 있기 때문입니다.
-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 ;
}
float은 실수형 자료구조라서 정수를 정확하게 담을 수 없습니다. long long을 사용하세요.
저도 long long 써야 맞았다죠...
아마도 최대 차가 40,000,000,000까지 가능해서 그런 것 같습니다.
double 쓰셔도 되고요.
double은 워낙 최대치가 커서...
#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인데.. 혹시 따로 설정해야 되거나 그런게 있나요?
입력과 출력을 받을 때 %d 대신에 %lld로 해 보세요
@79brue
큰 수가 필요할 때, double 사용하지 마세요. 실수형 자료구조라서 정확한 값이 저장되지 않습니다. 이 문제는 맞을 수도 있겠지만, 다른 문제는 틀릴 수도 있어요. 복불복입니다.
@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;}
저도 abs 썼을때는 오류가 나던데...
한번 삼항연산자로 해결해 보세요.
abs(p) 자리에 n>m ? n-m : m-n을 넣어 보세요.
오 ~~ 됐네요 ^^ 감사합니다!!
댓글을 작성하려면 로그인해야 합니다.
shg789 9년 전
이거 절대값 구하는거 아닌가요?
근데 왜 틀리다고 나오져?
JAVA로 했는데도 틀리고
C언어로 abs써봤는데도 안되고;
뭐가 문젠지 모르겠네요..