jumpingz   7년 전

하노이 문제를 풀다가 2^100 값이 존재하길래 어떻게할까 찾아보다가 long double 자료형이 존재하는걸 발견했습니다만

문제는 얘가 2^54를 넘어가면서 -1 및 +1 자체가 먹히지를 않더군요.. -2 , +2 이상부터는 또 먹히고...

위 문제를 어떻게 처리해야할지를 모르겟습니다..

qja0950   7년 전

long double 도 숫자가 너무 커지거나 작은 상황에서 부정확하기 마련입니다.ㅠㅜ

저 같은 경우는 BIGINT를 만들어서 진행하였습니다.

vector<int> Number에 각 자리수를 한 글자 한 글자 넣어 둔 뒤, 계산하는 방법입니다.

yukariko   7년 전

위 댓글의 해결책이 가장 일반적인 방법입니다만, 2^54 - 1 같은 경우만 해결한다면 쉬운 방법이 없진 않습니다.

double 또는 long double 과 sprintf를 이용해서 2^54를 문자열로 만들고, 마지막 자리를 1 빼주면 됩니다..

자리 내림도 고려할필요 없습니다. 2의 거듭제곱은 0으로 끝나지않기때문에 1을 빼는경우는 내림이 존재하지 않습니다.

jumpingz   7년 전

아 그렇군요.. 혹시나 다른 뾰족한방법이있나 했는데 ㅠ 그래도 감사합니다. 많이 배워갑니다

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