n = 1일 경우가 안되서 다시 수정했는데 또 틀렸다고 뜨네요... ㅠㅠ..
1789번 - 수들의 합
n = 1일 경우가 안되서 다시 수정했는데 또 틀렸다고 뜨네요... ㅠㅠ..
@unused 님, 왜 1 + 8 * k에서 오버플로가 발생하나요?
아마 sqrt()에 double형을 인자로 받아서 그런가요...?
만약 그렇다면 k자체가 오버플로가 발생해서 1 + 8LL * k 도 결국은 오버플로가 발생하지 않나요?
1 + 8LL * k가 의미하는 바가 뭔지 모르겠습니다..ㅠㅠ
아하...!! 그럼 sqrt()안에 double형이 인자로 들어가는데 1 + 8LL * k 같이 long long 타입을 대입시켜도 무관하나요?
@unused님... 죄송하지만 사소한 질문하나 더 드리겠습니다... ㅎㅎ;
맨 처음 포스팅한 소스에서는 n == 1일 경우가 되지 않아서 혹시나 하고 temp 라는 변수에다가 대입을 시켰습니다.
그러니 n == 1일 경우가 작동이 되던데...
왜 n == 1일 경우에 printf()안에서 더하기 연산을 하면 리턴값이 제대로 나오지 않았는지 알 수 있을까요?
그리고 답변 감사합니다!! 덕분에 큰 도움이 됬습니다. ㅎㅎㅎ
MAX(temp1, temp2) + 0.5를 풀면 ((temp1) > (temp2)) ? (temp1) : (temp2) + 0.5인데 +가 ?:보다 우선순위가 높아서 (temp1 > temp2) ? temp1 : (temp2 + 0.5)처럼 해석되기 때문에 답이 안 나옵니다. MAX 매크로 전체에 괄호를 씌워주셔야 합니다: #define MAX(a, b) (((a) > (b))? (a) : (b))
그리고 double은 유효숫자가 15자리정도 되는데요, 이 문제에서는 1 + 8LL * k가 아무리 커봤자 11자리 정도가 한계여서 괜찮습니다.
@unused님 정말 감사합니다... ㅠㅠ 너무 똑똑하신 것 같아요.
어떻게 하면 그런 지식을 쌓는지.. 부럽네요. 다시 한 번 감사합니다!
댓글을 작성하려면 로그인해야 합니다.
tjdgns9246 7년 전
예제도 맞게 나오고.. MAX(a, b) 함수에서 input값의 조건으로 인해
어차피 양수가 나올거라 생각하고 간단하게 캐스팅해줬는데 오답이 뜨네요
어디가 잘못된건지 알 수 있을까요..? ㅠㅠ