今天一个哥们去面试有道题问到我,题目是这样的:
写一个函数/方法,输入一个整数,判断是否为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次方。