思路:其实就是一个简单的枚举问题即可。因为数据范围就5位数,且限定的因数的形式,所以符合条件的很少,可以直接枚举。
代码:
#include <iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<set>
#include<stack>
#include<queue>
#include<map>
using namespace std;
const int N=200;
typedef long long ll;
typedef pair<int,int> pii;
void Solved() {
int n;
cin>>n;
int t=n;
int flag=1;
//特判一下已经符合条件的输入
while(t){
if(t%10>=2){
flag=0;
break;
}
t/=10;
}
if(flag==1){
cout<<"YES"<<endl;
return;
}
//能够成为因数的就下面几个,我们一个一个枚举即可(像 110可以由 10,11组合使用)
int arr[]={10,11,101,111,1111,1011,1001,1101};
int num=n;
for(int i=0;i<=7;i++){
while(num%arr[i]==0){
num/=arr[i];
}
if(num==1) break;
}
if(num==1) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
int main()
{
int t;
cin>>t;
while(t--) {
Solved();
}
return 0;
}