判断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次方。

你可能感兴趣的:(判断y是否为x的n次幂)