int f(int x) {//求x在二进制下的数
int len = 0, val = 0;
while(x) {
val += (x % 2) * q_pow(10, len ++ );
x /= 2;
}
return val;
}
void solve() {
int n;
cin >> n;
set<int> st;
int x = n;
while(x) {
st.insert(x % 10);
x /= 10;
}
int is_1 = 1;
for(auto t : st)
if(t >= 2) is_1 = 0;
if(is_1) {//判断n是不是只是由01构成的
cout << "YES" << endl;
return ;
}
while(n > 1) {
int val = 2;
while(n % f(val) != 0) {
val ++ ;
if(f(val) > n) {
cout << "NO" << endl;
return ;
}
}
n /= f(val);
//cout << n << endl;
}
cout << "YES" << endl;
}
就是 拿到一个n 让他先一直除10(如果能被10整除的话) 不能被10整除了再除11 一直下去 直到除数大于n了即可 但这样是不正确的 因为比如n是1001 那么n / 11 = 91 91不能被10 11 100 整除 也就应该返回false 但n本身就是一个01构成的数字 所以先判断下n自己 但为什么这样子写是对的呢