[PAT解题报告] 数字黑洞 (20)
转载from http://tech-wonderland.net/blog/pat-1069-the-black-hole-of-numbers.html
基本上模拟, 考察怎么得到这个四位数的每位的数字吧, 水题, 下面是可以AC的代码:
#include <cstdio>
#include <vector>
#include <functional>
#include <algorithm>
const int hole = 6174;
const int ndigits = 4;
std::vector<int> int2vec(int n) {
std::vector<int> res(ndigits, 0);
for(int i = ndigits - 1; i >= 0; --i, n /= 10)
res[i] = n % 10;
return res;
}
int vec2int(const std::vector<int> &vec) {
int res = 0;
int len = vec.size();
int mul = 1;
for(int i = len - 1; i >= 0; --i) {
res += vec[i] * mul;
mul *= 10;
}
return res;
}
int sortAndPrint(std::vector<int> &digits) {
sort(digits.begin(), digits.end());
int smaller = vec2int(digits);
sort(digits.begin(), digits.end(), std::greater<int>());
int bigger = vec2int(digits);
int n = bigger - smaller;
printf("%.4d - %.4d = %.4d\n", bigger, smaller, n);
return n;
}
void gao(int n) {
if(n <= 0|| n >= 10000)
return ;
std::vector<int> digits = int2vec(n);
if(allTheSame(digits)) {
printf("%.4d - %.4d = 0000\n", n, n);
return ;
}
n = sortAndPrint(digits);
while(n != hole) {
digits = int2vec(n);
n = sortAndPrint(digits);
}
return ;
}
int main() {
int n;
scanf("%d", &n);
gao(n);
return 0;
}

