Contact me:

c++求以3为底的对数 遇到243 怎么也通不过

题目leetcode326

给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x

神奇数字243

我的方法:求\(log_3(n)\),判断是否是整数.然后遇到243怎么也通不过

原始代码

class Solution {
public:
    bool isPowerOfThree(int n) {
        cout<<log(n)/log(3);//5
        return fmod(log(n)/log(3), 1)==0;//n=243 false
    }
};

打印了log(243)/log(3)显示的5//应该是4.999999999999999为什么打印不出来?
但是取模就是通不过

解决办法

log10()...

大概原因

log3取整时入了一位然后就稍微大了点

5*log(3) = 5.493061443340549133 log(3) = 1.098612288668109782108
log(243) = 5.493061443340548    log(3) = 1.0986122886681098
   ==> log(243)/log(3) = 4.999999999999999

5*log10(3) = 2.385606273598312121                               
log10(243) = 2.385606273598312    log10(3) = 0.47712125471966244
   ==> log10(243)/log10(3) = 5.0

log10(3)成功

class Solution {
public:
    bool isPowerOfThree(int n) {
        return fmod(log10(n)/log10(3), 1)==0;
    }
};
posted @ 2022-01-04 15:10  impwa  阅读(363)  评论(1编辑  收藏  举报