pow of three

这是我在了leetcode上面做的第一个题,判定一个整数是否是3的幂,我首先是将这个问题完完全全地当作数学题来解决,解题思路是:假设该输入的整数n是大于0的,然后我取该数以3为底数的对数的值,再将取得的值强制转换为int,假设int之后得到的值为m,然后在幂回去,即:3^m,看3^m与n是否相等。

解题思路是从数学的角度来看是没有问题的,但是呢,计算机因为字长的限制,在表示一些小数的时候不是完全精确的,所以在运行代码的时候,出现了下面这个问题:

n= 243; Math.log((double)n)/Math.log(3.0) = 4.99999999..不是5.0 (这是用java实现的情况)。

然后我在网上找的另一解决该问题的代码是:return (n > 0 && 1162261467 % n == 0);

这是从计算机的角度来解决这个问题,考虑到计算机表示3次幂的最大正整数是1162261467 ,然后用该界限值对n进行取模,余数为0即为3的幂。

posted @ 2016-04-05 19:12  GoldRoger  阅读(138)  评论(0)    收藏  举报