牛牛有一个正整数x,牛牛需要把数字x中的数位进行重排得到一个新数(不同于x的数),牛牛想知道这个新数是否可能是原x的倍数。请你来帮他解决这个问题。
输入描述:
输入包括t+1行,第一行包括一个整数t(1 ≤ t ≤ 10), 接下来t行,每行一个整数x(1 ≤ x ≤ 10^6)输出描述:
对于每个x,如果可能重排之后变为自己的倍数输出"Possible", 否则输出"Impossible".示例1
这道题目使用模拟的方法,使用C++语言不用手动实现全排列,可以使用标准库函数提供的next_permutation函数实现全排列功能,当然这道题目还涉及到string和int的转化,相应的API函数要熟悉
#include<iostream> #include<string> #include<algorithm> using namespace std; int main() { int T; cin >> T; while (T--) { int n; cin >> n; string s = to_string(n); sort(s.begin(), s.end()); bool flag = false; do { int p = stoi(s); // string 转为int if (p != n && p%n == 0) { flag = true; break; } } while (next_permutation(s.begin(), s.end())); cout << (flag ? "Possible" : "Impossible") << endl; } return 0; }