算法与数据结构:判断一个数是否是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;
}       

 

posted @ 2017-04-11 09:31  后端技术小屋  阅读(344)  评论(0编辑  收藏  举报