2012-10-16 2 views
2

Java BigInteger의 각 숫자 (예 : System.out.println() 각 숫자)는 어떻게 검사 할 수 있습니까? 문자열로 변환하는 것 외에 다른 방법이 있습니까?Java에서 BigInteger의 각 자릿수는 어떻게 검사 할 수 있습니까?

+0

BigInteger의 숫자는 10 진수에 저장되지 않으므로 문자열 표현의 문자를 검사하는 것 외에 다른 방법은 없습니다. – maerics

+0

문자열 만 BigInteger가 처리 할 수있는 숫자를 저장할 수 있습니다. –

답변

2

스트레이트 포워드 코드를 인쇄 자리 :

private static void printDigits(BigInteger num) { 
    BigInteger[] resultAndRemainder; 
    do { 
     resultAndRemainder = num.divideAndRemainder(BigInteger.TEN); 
     System.out.println(Math.abs(resultAndRemainder[1].intValue())); 
     num = resultAndRemainder[0]; 
    } while (num.compareTo(BigInteger.ZERO) != 0); 
} 
1

BigInteger API docs은 이와 같은 기능을 제공하지 않는 것으로 보입니다. 더욱이이 수는 10 진수로 표현되지 않을 가능성이 큽니다 (매우 비효율적이므로). 따라서 BigInteger의 10 진수를 검사하는 유일한 방법은 문자열 표현을 보는 것입니다.

+0

bigInteger를 정수 배열로 변환 할 수 있습니다. 또한 도움이 될 것입니다. – djscribbles

1

물론 각 숫자를 계산하는 데 기본 수학을 사용할 수 있습니다. 특히 divideAndRemainder 방법이 도움이 될 수 있습니다. 그러나 이것이 String으로 변환하고 문자를 검사하는 것보다 더 효율적이라는 것은 의심 스럽습니다. BigInteger 수학은 보통 int 또는 long 수학보다 비쌉니다.

0

당신이 할 수있는 유일한 방법은 문자열로 변환하고 각 문자를 확인하는 것입니다. 다음은 예입니다.

BigInteger bigInteger = new BigInteger("123"); 
String bigIntegerValue = bigInteger.toString(); 
for(int i = 0; i < bigIntegerValue.length(); i++) { 
    System.out.println(bigIntegerValue.charAt(i)); 
} 
-1

숫자의 각 자릿수를 얻는 것이 매우 간단 해 보입니다. 숫자가 10보다 큰지 추적하고 그 위에 모드 10 연산을 수행 한 다음 10으로 나누는 루프를 만듭니다. 어쩌면

while (num >10) 
{ 
    System.out.println(num%10); 
    num = num/10; 

} 
+0

'BigInteger'의 경우 연산자 대신'mod','divide','compareTo' 메서드가 필요합니다. 그러나 원칙적으로 작동합니다. –

+0

Opps 고침 드릴 것입니다. – RGdev

+0

또한 고위 자리를 수용해야합니다. –

0

이 같은 BitSet을 사용하여 BigInteger의 각 비트를 검사 할 시도 할 수 있습니다 첫 번째 향한 마지막에서

BitSet bitSet = BitSet.valueOf(bigInteger.toByteArray()); 
관련 문제