程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode 326 Power of Three(3的冪)(遞歸、Log函數)

LeetCode 326 Power of Three(3的冪)(遞歸、Log函數)

編輯:C++入門知識

LeetCode 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,那麼就可以斷定題意是上面我說的第二種了。

是否還記得log函數呢,之前有一道題遇到過,所以這次一下就想到了……

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;
    }
};

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved