zoukankan      html  css  js  c++  java
  • 算法与数据结构:判断一个数是否是3的乘方

    题:不适用迭代或者递归,判断一个int类型的非负整数是否为3的乘方

    解题思路:

    1. 查表法,因为int类型的非负整数是有限的,将所有整数放入一个set中。然后直接判断输入是否在set中即可
    2. 整除法,因为3是素数,首先int类型内3的最大乘方数,如果一个int类型数是3的乘方,那么该数必然能够整除最大乘方

     

    对应代码如下:

    int max_power_3()
    {
      int64_t ret = 1;
      int64_t high = INT_MAX;
      while (ret <= high)
        ret *= 3;
      return int(ret/3);
    }
    
    bool isPowerOfThree(int n)  
    {
      return (n != 0) && (max_power_3() % n == 0); 
    }
    set<int> powers;
            
    void init_map()
    {         
      int64_t i = 1;    
      while (i<=(int64_t)INT_MAX)
      {     
        powers.insert(i);
        i *= 3;
      }     
    }       
            
    bool isPowerOfThree1(int n)
    {       
      return powers.count(n) > 0;
    }       
  • 相关阅读:
    java--堆栈
    git 修改默认编辑器
    java 二维数组的行列长度
    公钥私钥
    手机是如何定位的
    Git和svn的区别
    面试未解之谜
    删除单链表中重复元素
    深入分析事务的隔离级别
    传送
  • 原文地址:https://www.cnblogs.com/taiyang-li/p/6692047.html
Copyright © 2011-2022 走看看