数位重排

题目描述

牛牛有一个正整数x,牛牛需要把数字x中的数位进行重排得到一个新数(不同于x的数),牛牛想知道这个新数是否可能是原x的倍数。请你来帮他解决这个问题。

输入描述:

输入包括t+1行,第一行包括一个整数t(1 ≤ t ≤ 10),
接下来t行,每行一个整数x(1 ≤ x ≤ 10^6)

输出描述:

对于每个x,如果可能重排之后变为自己的倍数输出"Possible", 否则输出"Impossible".
示例1

输入

复制
2
14
1035

输出

复制
Impossible
Possible
解题思路:利用c++STL中的全排列可以极大地简化代码,期间用到的函数在我的c++分类中有说明
代码如下:
#include <bits/stdc++.h>
using namespace std;
int main() {
    int T; cin >> T;
    while (T--) {
        int n; cin >> n;
        string s_n = to_string(n);
        sort(s_n.begin(), s_n.end());
        bool flag = false;
        do {
            int p_num = stoi(s_n);
            if (p_num!=n && p_num%n==0) {
                flag = true;
                break;
            }
        } while (next_permutation(s_n.begin(), s_n.end()));
        cout << (flag ? "Possible" : "Impossible") << endl;
    }
    return 0;
}

 

posted @ 2019-06-09 21:27  浅滩浅  阅读(632)  评论(0编辑  收藏  举报