求助 代码对了但不理解
查看原帖
求助 代码对了但不理解
757864
ruye楼主2024/3/30 11:39
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自己 但为什么这样子写是对的呢

2024/3/30 11:39
加载中...