2012-10-16 2 views
1

내 프로젝트에 자바에서 필요한 전력 (기본, 지수)에 대한 최적의 방법을 만들고 싶습니다. 기본 및 지수 유형이 모두 int이고 지수가 < = 10입니다.^9.이 작업은 Java에서 수행되어야하지만 비트 시프트를 사용할 수는 있지만 java.beind에서 비트 셋을 사용하는 것이 좋습니다.효율적인 전력 지수 방법을 자바에서 (JDK 1.7)

+1

오버플로를 어떻게 처리 하시겠습니까? –

+1

Optimal은 매우 어려울 것입니다.하지만 'O (log exponent)'를 매우 쉽게 할 수 있습니다 : http://en.wikipedia.org/wiki/Exponentiation_by_squaring - 오버 플로우를 고려하지 않습니다. – IVlad

+0

@IVlad : 해결책은 O 연산 (log exponent)이 아니라 O (log exponent) 시간/연산 – amit

답변

0

java.lang.BigInteger 클래스 만 사용하면됩니다. 그것은 정확하게 효율적인 방법으로 원하는 것을 정확하게 수행하는 pow() 방법을 가지고 있습니다.

+0

사실 modpow()는 문제가 해결되었습니다. :) – djscribbles

-1

지수가 int로되어 있기 때문에 이미 컴퓨터의 숫자가 2 진수로 표시되어 있습니다. 따라서 계산에 사용하는 기본, 지수 및 임시 정수의 세 가지 정수가 있어야하며 솔루션에 대해 하나 더 사용해야합니다. 다음과 같이 시작하십시오 :

unsigned int base;//you manage input for this and exponent like you wish, probably passed in as parameters 
unsigned int exponent; 
unsigned int temp = base; 
unsigned int answer = 1; 
while (exponent!=0){ 
    if (exponent%2 == 1){ 
     answer *= temp; 
    } 
    exponent>>1; 
     temp<<1; 
} 

이 알고리즘을 시도하고 어떻게 작동하는지 알려주십시오. while look은 지수의 최대 비트 길이 (즉, 32 배)에서 실행됩니다. 이 코드는 큰 숫자 또는 음수를 처리하지 않지만 필요 여부를 잘 모르겠습니다.