LeetCode 231: Power of Two

Given an integer, write a function to determine if it is a power of two.

很简单的题目,但是可以有多种方法解决;

一,求log2(n)

用换底公式可以得到double res=log10(n)/log10(2);

判断res是否为零。此法可以判断各种 幂的问题

代码如下:

class Solution {
public:
    bool isPowerOfThree(int n) {
    double res = log10(n) / log10(3); 
    return (res - int(res) == 0) ? true : false;
    }
};
二,判断二进制中1的个数

由 1:0001  2:0010  4:0100  8:1000 ........观察发现,2的整数幂的二进制形势只有一个非零,且为第一个位置

可以通过判断二进制下1的个数来判断

代码如下:

class Solution {
public:
    bool isPowerOfTwo(int n) {
        int count=0;
        if(n<0)
        return false;
        while(n)
        {
            count++;
            n=n&(n-1);
        }
        if (count!=1)
        return false;
        else 
        return true;
    }
};
同样还有另外的方式:

	bool isPowerOfTwo(int n) {
		int count = 0;
		while (n > 0)
		{
			count+=(n&0x01);
			n>>=1;
		}
		return count==1;
	}




发布了30 篇原创文章 · 获赞 3 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览