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;
        }
    };
    
  • 相关阅读:
    使用GitHub建立自己的个人主页
    学习Linux第二天
    学习Linux第一天
    网页布局基础
    HTML弹出窗口
    CSS进阶
    HTML+CSS入门
    廖老师JavaScript教程高阶函数-sort用法
    获取页面的title值
    if...else...这段代码打印结果,并简述其理由
  • 原文地址:https://www.cnblogs.com/impw/p/15762573.html
Copyright © 2011-2022 走看看