Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1524275
  • 博文数量: 399
  • 博客积分: 8508
  • 博客等级: 中将
  • 技术积分: 5302
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-14 09:28
个人简介

能力强的人善于解决问题,有智慧的人善于绕过问题。 区别很微妙,小心谨慎做后者。

文章分类

全部博文(399)

文章存档

2018年(3)

2017年(1)

2016年(1)

2015年(69)

2013年(14)

2012年(17)

2011年(12)

2010年(189)

2009年(93)

分类: LINUX

2009-10-28 11:39:43

方法1: 用到浮点数除法
                     if (pow(3,log(N)/log(3)) == N)



方法2: 把这个数的每一位想加用和除以3,再将得数相加,继续除3,直到得数为1,如果在这个过程中没有余数,也就是说可以一直都除尽那么这个数就是3的幂。
原理是利用:  一个数各位之和能被3整除,则这个数可以被3整除.  这样就不用一直除以3或乘以3来迭代,而是将数字减小来计算,不一定能减少迭代次数

方法3:利用3x=2x+x计算,是方法2的延续
bool is_power_of_3( int x = 1 )
{
     for ( int i = 1; i < x +1; true )
     {
         if ( x == i )
         {
            return true;     
         }    
         else
         {
             i = i << 1 + i;
         }
     }   
     
     return false;  
}


方法4:列举法
template
bool isPow3(const Integer & n){
    static const Integer POW_3[18] =
    {1,3,9,27,81,243,729,2187,6561,19683,59049,177147,531441,1594323,4782969,14348907,43046721,129140163};
    return std::binary_search(POW_3,POW_3 + 18,n);
}
阅读(703) | 评论(0) | 转发(0) |
0

上一篇:cin用法集锦

下一篇:最大子序列和的位置

给主人留下些什么吧!~~