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