백준 10869번을 풀고 있을때의 일이었다.
문제의 조건은 다음과 같았다.
두 자연수 A와 B가 주어진다. 이때, A+B, A-B, A*B, A/B(몫), A%B(나머지)를 출력하는 프로그램을 작성하시오.
두 자연수 A와 B가 주어진다. (1 ≤ A, B ≤ 10,000)
첫째 줄에 A+B, 둘째 줄에 A-B, 셋째 줄에 A*B, 넷째 줄에 A/B, 다섯째 줄에 A%B를 출력한다.
지금까지는 모두 정수 A, B였는데, 이 문제는 자연수여서
“혹시 mathf.abs()를 사용하는건가..? 맞다.. mathf.abs()는 절대값이니.. 자연수와는 다른 의미지!..
그럼,, uint를 사용하는건가?”
그래서 uint를 사용해보았다.. 왜냐면 u가 붙은 대부분의 자료형들은 모두 양수값만을 나타내니까…
string[] AoB = Console.ReadLine().Split();
Console.WriteLine(uint.Parse(AoB[0]) + uint.Parse(AoB[1]));
Console.WriteLine(uint.Parse(AoB[0]) - uint.Parse(AoB[1]));
Console.WriteLine(uint.Parse(AoB[0]) * uint.Parse(AoB[1]));
Console.WriteLine(uint.Parse(AoB[0]) / uint.Parse(AoB[1]));
Console.WriteLine(uint.Parse(AoB[0]) % uint.Parse(AoB[1]));
--> 틀렸습니다!
이론상 완벽했는데, 왜 틀렸는지 궁금해져서 디버깅 시작!
- A : 7 / B : 3
백준에 나와있는 예제대로 했다. 출력이 잘만된다. 근데 왜 오류가 나는거지?- A : 7 / B : 7
역시나 잘만된다…- A : 1 / B : 3
- 어제 발견했던, A를 B로 나눈값 출력을 double값으로 하면 오차가 발생하던 수이다
- 근데 이게 왠걸?
- 값이 차례대로 “4, 4294967294, 3, 0, 1” 이 나온다
- ??? 마이너스 값이 왜저렇게 나오지? 난 나눗셈에 문제가 있을거라 생각했지만 아니었다..
- 찾아보니 uint는 양수값만을 나타내기에 값이 음수로 나와버리면 오류가 나, 최대값으로 출력된다는 것이었다!
그럼 자연수를 어떻게 나타내지? 고민을 하고 있던 찰나..
simple is best!
어짜피 입력을 사용자가 직접 하는거라면 일반 정수값도 상관없을거 같다!
잘된다!