zoukankan      html  css  js  c++  java
  • 51nod-2512 重排得到2的幂 位运算判断是否为2的幂值

    题目比较简单,只有一个小技巧,用位运算判断是否为2的幂值。

    我们知道2的幂值二进制表示首位必为1,其余位全为零,而2的幂值-1与其恰好相反,即首位为零,其余位全为1,两者相与结果为0.

    我比较懒用了全排列的方法做,效率比较低,如果想要加快运行速度,可以进行预处理,将数据范围内2的所有幂值存进数组,再按条件进行比较。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    
    using namespace std;
    
    bool ispow(int num)
    {
    	if(num==0)	return false;
    	else return (num&(num-1))==0;
    }
    
    int main()
    {
    	char str[10];
    	cin>>str;
    	int len=strlen(str);
    	sort(str,str+len);
    	bool rea;
    	do{
    		int sum=0;
    		for(int i=0;i<len;i++)
    			{
    				if(str[0]=='0')	break;
    				sum+=pow(10,len-i-1)*(str[i]-'0');
    			}
    		rea=ispow(sum);
    		if(rea)	break;
    	}while(next_permutation(str,str+len));
    	if(rea)	cout<<"true"<<endl;
    	else cout<<"false"<<endl;
    	return 0;
    }
  • 相关阅读:
    深度优先搜索查找图中的所有连通分量
    广度优先搜索BFS-图
    深度优先搜索DFS-图
    稀疏向量算法
    zip函数
    函数(三)>>内置函数
    函数(二)
    面向对象1
    面向对象2
    函数(上)
  • 原文地址:https://www.cnblogs.com/BlueDoor1999/p/13301385.html
Copyright © 2011-2022 走看看