LetCode 326 Power of Three(3의 멱)(반복, Log 함수)

번역하다

 , 3 ( ……

 :
 。

원문

Given an integer, write a function to determine if it is a power of three.

Follow up:
Could you do it without using any loop / recursion?

분석하다.


제목의 뜻을 나는 사실 충분히 이해하지 못한다. 예를 들면 12는 도대체 될 수 있을까?아니면 3, 9, 27, 81 이런 거밖에 안 돼요?우선 간단한 귀환을 써 봅시다.
bool isPowerOfThree(int n) {
    if (n == 1) return true;
    else if (n == 0) return false;
    else if (n % 3 == 0)
        return isPowerOfThree(n / 3);
    else return false;
}

제출에 성공했습니다. 그러면 스스로 12를 매개 변수로 해 보았는데false로 되돌아온 것을 발견했습니다. 그러면 제목의 뜻은 위에서 말한 두 번째라고 단정할 수 있습니다.
로그 함수 기억하시나요? 전에 한 문제 만났었는데 이번에 딱 생각났어요...
logn3
12로 계산하면
log123=2.26186
int(log123)=2
log123−int(log123)=0.26186
그래서 결과가 0인지 아닌지 직접 판단했으면 좋겠는데...
bool isPowerOfThree(int n) {
    double logAns= log(n) / log(3);             
    return (logAns- int(logAns) == 0) ? true : false;
}

그러나 이 코드를 제출한 후에도 여전히 오류가 있는 것을 발견했다. 243은 위의 코드에서false였다. 끊어진 부분을 보면 정밀도 문제 때문에 계속 고쳐야 한다.
logn3=logn10log310
그래서 코드가 나왔는데...

코드

class Solution {
public:
    bool isPowerOfThree(int n) {
        double logAns = log10(n) / log10(3);
        return (logAns - int(logAns) == 0) ? true : false;
    }
};

좋은 웹페이지 즐겨찾기