2012-09-30 4 views
1

BigInteger 값을 Math.Log10 메서드와 함께 사용하려고합니다. BigInteger에서 소수 자릿수 계산

final BigInteger answerNo = fact; 
final int digits = 1 + (int)Math.floor(Math.log10(answerNo)); 

불행하게도 컴파일러는 호환되지 않는 유형을 말한다.

intBigInteger으로 변경하면 여전히 좋아하지 않습니다.

+0

나는 질문하고 허용 대답의 정보를 준수하려면이 질문의 제목을 변경했습니다. 분명히 숫자를 계산하는 것은 실제 10 대수를 수행하는 것만 큼 정확하지 않습니다. –

답변

5

은 :

int digits = answerNo.toString().length(); 
+0

그게 목표라면, 실제로 훨씬 더 간단해질 것입니다! – assylias

+0

그 중에서 1을 뺄 수도 있습니다. –

+0

원래 코드에 1을 추가했습니다 ... – epsalon

1
  1. 당신은 intBigInteger A를 할당 할 수 없습니다 - 당신은 쓸 수 : final BigInteger answerNo = BigInteger.valueOf(fact);
  2. Mat.log10가하는 double 기대하지 않는 BigInteger

당신은 정밀도의 손실이 괜찮다면 , 당신은 간단하게 복식을 사용할 수 있습니다 :

final int digits = 1 + (int)Math.floor(Math.log10(fact)); 

정밀도가 중요하다면, 로그를 수동으로 계산할 수 있습니다. 대신 간단하게 수행하여 log10이 자리의 번호를 찾을 수 있습니다 일을

관련 문제