小b有一个数n,现在她想把n的每一位重排列,使得得到的结果为2的幂次。
请问小b能得到2的幂次吗?
注意重排列后不允许有前导0。
样例解释:46重排列成64,为2^6。
输入
输入一个数N,其中1≤N≤10^9
输出
满足条件,输出“true”;
不满足,则输出“false”。
输入样例
46
输出样例
true
#include<bits/stdc++.h>
using namespace std;
int a[20];
int main()
{
ios::sync_with_stdio(false);
int n,tip=0;
cin>>n;
while(n)
{
a[tip++]=n%10;
n/=10;
}
sort(a,a+tip);
do
{
if(a[0]==0)
continue;
int t=0;
for(int i=0;i<tip;i++)
t=t*10+a[i];
while(t%2==0)
{
t/=2;
}
if(t==1)
{
cout<<"true";
return 0;
}
}while(next_permutation(a,a+tip));
cout<<"false";
return 0;
}