Sword는 Offer 16을 의미합니다. Numerical integer power (C ++) fast power (binary angle)

여기에 사진 설명 삽입
여기에 사진 설명 삽입
여기에 사진 설명 삽입
참고 :이 질문은 기본 사이트 (https://leetcode-cn.com/problems/powx-n/)의 50 개 질문과 동일합니다.

문제 해결 아이디어 :

여기에 사진 설명 삽입
여기에 사진 설명 삽입
여기에 사진 설명 삽입
여기에 사진 설명 삽입
여기에 사진 설명 삽입

class Solution {
    
    
public:
    double myPow(double x, int n) {
    
    
        bool flag = false;
        long long N = n;//赋值n
        if (N == 0) return 1;//0次方
        if (N < 0) flag = true, N = -N;
        double ret = 1;
        for (int i = 0; i < 32; ++i) {
    
    //由于不超过2的32次方减一,故i少于32
            if ((1 << i) & N) ret *= x;//1 << i表示1的二进制左移i位
            //(1 << i) & N求N的二进制中的1
            x = x * x;
        }

        if (flag) return 1.0 / ret;//负次方
        else return ret;//正数次方
    }
};

복잡성 분석 :

시간 복잡도 O (log 2 n) : 이분법의 시간 복잡도는 로그 수준입니다.
공간 복잡도 O (1) : res, b와 같은 변수는 일정한 크기의 추가 공간을 차지합니다.

추천

출처blog.csdn.net/qq_30457077/article/details/114644717