题目链接:3的幂
题目描述:给定一个整数,写一个函数来判断它是否是 3 的幂次方。
要求不用循环或递归,O(1)判断。
有各种奇奇怪怪的方法,打表int范围内的3的次幂比对,int范围内最大的3的次幂一定是n倍数,求log3(n)是否为整数,三进制判断是否只有首位为1等等。
我用了判断log3(n)是否为整数的方法。
C语言的log只有以10和e为底的,其他要用换底公式,如:
l
o
g
3
(
n
)
=
l
o
g
x
(
n
)
/
l
o
g
x
(
3
)
log_3(n)=log_x(n)/log_x(3)
log3(n)=logx(n)/logx(3)
讲道理这里的log用log10和log应该是一样的
但是!!
log是以e为底,会有精度损失!(为什么??
所以换底公式就还是用log10吧。emmmmm