khnemu   1년 전

우선 k에 대한 방정식을 세워서 문제는 해결하였습니다.

그런데 z값에서 곱셈의 순서에 따라 정답이 달라졌는데 왜 그런지 궁금해서 질문 올립니다ㅠ

long x = Long.valueOf(st.nextToken());
long y = Long.valueOf(st.nextToken());
long z = 100 * y / x;

상단의 코드로 입력 값을 받고 z값을 구했는데 처음엔 y / x * 100으로 했을 땐 틀린 답이 나왔으나 100 * y / x로  z를 구하는 방정식을 바꾸자 문제를 성공하였습니다.

어렴풋이 부동소수점의 문제로 발생하는 것이라고 생각은 하는데 구체적으로는 잘 모르겠네요...ㅠㅠ

혹시 설명 가능하신분 계신가요..????

jyunni   6달 전

1년전 글이지만 누군가에게 도움이 되리라 적어봅니다.

자바에선 정수끼리 나눗셈을 할경우 나머지가 버려지는것으로 알고 있습니다.
만약 3/4를 할경우 0.75가 아니라 0이 됩니다. 그렇기에 100을 곱해봐야 0이 될것입니다.

하지만 100을 먼저 곱하는 경우 3*100 = 300, 이고 300/4=75 가 되면서 숫자가 충분히 커지므로 그런것 같습니다.
x/y*100 으로도 좋은 값이 나오게 할려면 x 또는 y를 double로 캐스팅 하시면 됩니다. (한쪽이라도 double이면 double로 결과가 나옵니다.)
아래 코드 참고해보세요. (C#만 쓰느라 언어설정에 자바가 없네요 ㅋㅋ... 자바 맞습니다.)

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