정수 전력 값은 : 안전의 서비스 (13)을 증명하기 위해

제목 설명

이중 기본 형식 및 부동 소수점 int 형 정수 지수를 감안할 때. 전원 염기의 지수를 찾는.
기본을 확인하고 지수가 동시에 0이 아니다
 

분석

주로 능력, 부동 소수점 수의 정수 전력을 계산하는 단계는 상기 입력 데이터의 무결성을 추정한다. 이 문제를 해결하기 위해, 입력 데이터가 존재하는 경우, 수

1.베이스 수가 제로 정수 인덱스 아니다

2. 염기 번호 인덱스가 음수, 0이 아닌

염기 번호가 0 3. 지수가 음 (제로 상태)

염기 번호가 0 4. 인덱스가 양수 (소정 특정의 값 0 또는 1)

구현 로직 코드는 가능한 모든 입력의 경우를 고려해야 할 기본 필요가 복잡하지 않고, 또한 부동 소수점 숫자에 대한 직접 "=="직접 비교하는 두 개의 번호를 사용하지 않는, 주목해야.

C ++ 코드 구현은 아래에 주어진다 :

클래스 솔루션 {
 공개 :
     이중 전원 ( 더블  베이스 , INT의 지수) { // 排除零除的情况出现
        경우 (표준 : ABS ( 베이스 - 0.0 ) <(1e- 4 ) && 지수가 < 0 ) { 반환  0.0 ; 
        } 
        부울 isnegative = (지수 < 0 )? 사실 : 거짓 ;
        하다면 (isnegative) {
           반환  1.0 (/ calc_power 베이스 - 지수);  
        } 
        다른{
             반환 calc_power ( 베이스 , 지수);  
        } 
    } 
     calc_power (  기부 , INT unsignedexp) {
         이중 입술 = 1.0 ;
        위한 ( int로 I = 0 ; I <unsignedexp가 나는 ++ ) { 
            입술 * = 베이스 ; 
        } 
        반환 입술을; 
    } 
     };

 당신은 O (N)에서 다음 재귀 방법, 감소 시간 복잡도 O (logn)를 사용하여 구현 될 수 계산 효율 calc_power 기능을 향상시키고 자하지만, 재귀 스택 공간의 복잡도가 O가되면 (logn)

더블 calc_power ( 더블  베이스 , INT unsignedexp) {
         // 로그 (N-) 시간 복잡도는 재귀 동일한 깊이가 로그 (N-) 
        IF (unsignedexp == 0 ) {
             반환  1.0 ; 
        } 
        IF (unsignedexp == . 1 ) {
              베이스 ; 
        } 
        더블 결과 calc_power = ( 베이스 unsignedexp >> 1. ) 
        결과 * = 결과,
         IF ((unsignedexp 및 0x1로 )를 == . 1 ) { 
            결과* = 베이스 ; 
        } 
        반환 결과; 
    }

 

추천

출처www.cnblogs.com/fancy-li/p/11613810.html