문제 URL:
2420번: 사파리월드
첫째 줄에 두 도메인의 유명도 N과 M이 주어진다. (-2,000,000,000 ≤ N, M ≤ 2,000,000,000)
www.acmicpc.net
다음 문제는 두 서브도메인의 유명도가 주어졌을 때, 그 차이를 구하는 프로그램으로
그냥 두 수를 빼주기만 하면 되는 간단한 문제였다.
하지만 두 번이나 틀렸는데, 두 번 다 범위에 문제가 있었다.
이 문제의 n과 m의 범위는 (-2,000,000,000 ≤ N, M ≤ 2,000,000,000)이지만
두 수를 빼주었을 때 최대 40억까지 가능하므로 int형을 사용하게 된다면 범위에서 벗어나게 된다.
처음에 풀 때는 int형으로 작성하여 틀려서, 범위를 깨닫고 그 뒤에 double로 작성했는데 이 역시 틀렸다.
찾아본 결과 이유는 문제에서 "서브도메인의 유명도는 정수이다."라고 주어졌는데,
double은 실수형 자료구조라서 정수의 정확한 값이 저장되지 않기 때문이었다.
따라서 이 문제는 데이터 타입 long long을 사용하여 풀었다.
#include<iostream>
using namespace std;
int main()
{
long long n, m, result;
cin >> n >> m;
if(n>m)
result = n - m;
else
result = m - n;
cout << result;
}
이 문제는 abs()함수(절댓값 반환 함수)를 이용하여 풀 수도 있는데
이때 입력 변수들이 long long int형이기 때문에 abs()가 아닌 llabs() 함수를 사용하여야 한다.
#include<iostream>
#include<cstdlib>
using namespace std;
int main()
{
long long n, m, result;
cin >> n >> m;
cout << llabs(n-m);
}