判断y是否为x的n次幂

今天一个哥们去面试有道题问到我,题目是这样的:

写一个函数/方法,输入一个整数,判断是否为3的n次方,返回bool值。

其实挺简单的,先判断特殊情况“<=0”return NO; "==1" return yes;

其他情况我顺便做了下拓展,最后的方法如下

- (BOOL)inPutNumber:(NSInteger)inPutNum isPowerOf:(NSInteger)powerNum {
    if(inPutNum < 0 || inPutNum == 0)  return NO;
    if(inPutNum ==1)   return YES;
    if (powerNum == 2) return (inPutNum & (inPutNum - 1)) == 0;
    while(0 == inPutNum%powerNum){
        inPutNum = inPutNum/powerNum;
        if(inPutNum == 1) return YES;
    }
    return NO;
}

对2的判断,是用的&(按位与)

以4(100)    7(0111)    8(1000)为例
 
4 & 3 --> 100 & 011     = 0
7 & 6 --> 0111 & 0110  != 0
8 & 7 --> 1000 & 0111   = 0
 
即 如果 m & (m - 1) == 0,则m是2的n次方。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容