zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    
  • 相关阅读:
    02-模板字符串
    01-学习vue前的准备工作
    21-z-index
    20-定位
    19-background
    18-超链接导航栏案例
    17-文本属性和字体属性
    16-margin的用法
    jBPM
    Table of Contents
  • 原文地址:https://www.cnblogs.com/impw/p/15762573.html
Copyright © 2011-2022 走看看