码迷,mamicode.com
首页 > 其他好文 > 详细

326.是否为3的平方根 IsPowerOfThree

时间:2017-01-10 23:37:06      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:color   ica   print   为知笔记   lang   代码   com   整数   clu   

//自己版本
  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. };





326.是否为3的平方根 IsPowerOfThree

标签:color   ica   print   为知笔记   lang   代码   com   整数   clu   

原文地址:http://www.cnblogs.com/xiejunzhao/p/95a7f960fc8efb0435d314cf4566f823.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!