326.是否为3的平方根 IsPowerOfThree

//循环版本
  1. public static bool IsPowerOfThree(int n) {
  2. if (n == 1) {
  3. return true;
  4. }
  5. double num = n;
  6. bool isPower = false;
  7. while (num >= 1) {
  8. num = num / 3;
  9. if (num == 1 && num == (int)num) {
  10. return true;
  11. }
  12. }
  13. return isPower;
  14. }


//递归版本
  1. public static bool IsPowerOfThree(int n) {
  2. if (n == 1) {
  3. return true;
  4. } else if (n == 0 || n % 3 > 0) {
  5. return false;
  6. } else {
  7. return IsPowerOfThree(n / 3);
  8. }
  9. }

最后还有一种巧妙的方法,利用对数的换底公式来做,高中学过的换底公式为logab = logcb / logca,那么如果n是3的倍数,则log3n一定是整数,我们利用换底公式可以写为log3n = log10n / log103,注意这里一定要用10为底数,不能用自然数或者2为底数,否则当n=243时会出错,原因请看这个帖子。现在问题就变成了判断log10n / log103是否为整数,在c++中判断数字a是否为整数,我们可以用 a - int(a) == 0 来判断,参见代码如下:

  1. class Solution {
  2. public:
  3. bool isPowerOfThree(int n) {
  4. return (n > 0 && int(log10(n) / log10(3)) - log10(n) / log10(3) == 0);
  5. }
  6. };





posted @ 2017-01-10 23:14  xiejunzhao  阅读(553)  评论(0编辑  收藏  举报