数位重排
题目描述
牛牛有一个正整数x,牛牛需要把数字x中的数位进行重排得到一个新数(不同于x的数),牛牛想知道这个新数是否可能是原x的倍数。请你来帮他解决这个问题。
输入描述:
输入包括t+1行,第一行包括一个整数t(1 ≤ t ≤ 10), 接下来t行,每行一个整数x(1 ≤ x ≤ 10^6)
输出描述:
对于每个x,如果可能重排之后变为自己的倍数输出"Possible", 否则输出"Impossible".
示例1
输出
复制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; }
不一样的烟火