fman1335   3년 전

런타임에러가 아니니 int라서 생기는 건 아닌 거 같고

어느 부분에서 메모리 초과가 날까요?

dldyddlwl   3년 전

while(result >= 0){

int p = result%2;

result/=2;

System.out.printf("%d",p);

}

이 부분에서 어느 순간 result = 0이 되는 순간이 있을겁니다.

그런데 while문 조건이 >=0 이므로 멈추지 못하고 계속 돕니다.

fman1335   3년 전

0을 빼면 틀렸다고 나오네요. 음.

dldyddlwl   3년 전

N은 최대 1000자리 이진수이므로, int형이 다 포괄하지 못해서 그렇습니다

fman1335   3년 전

음.. 이렇게 BigInteger로 수정했는데... 이번엔 출력이 안 되네요.

잘못작성한 게 있는지..

dldyddlwl   3년 전

BigInteger bi = new BigInteger("0");

bi.add(new BigInteger("2").pow(input.length()-i));

이 두 개의 구문을 봅시다.

bi.add(x)는 bi + x의 값을 리턴해줍니다! 그러나 말 그대로 리턴만 해주고, bi 자체의 값을 변경시키진 않습니다. 따라서!

bi = bi.add(x) 를 통해서 실제 bi 값을 변경시켜주셔야합니다.

마찬가지로 밑에 result.divide도 그렇습니다! ( 다만 modulus는 상관없겠죠! )

추신) 위 코드는, 시작이 0으로 뜨는 경우를 해결하지 않습니다

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