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;
    }
  • 相关阅读:
    Redis 连接
    Redis 脚本
    Redis 事务
    Redis 发布订阅
    redis 字符串数据(string)
    Redis 键(key)
    Redis 命令
    Redis的五种数据类型
    java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解决方案
    在命令行中运行eclipse中创建的java项目
  • 原文地址:https://www.cnblogs.com/BlueDoor1999/p/13301385.html
Copyright © 2011-2022 走看看