任意一个4位自然数N(N不能是4个数字一样,如1111、2222、….9999是不可以的,N也不能是6174),将组成自然数N的4个数字重新排列,形成一个最大数和最小数,最大数和最小数相减,其差是还是自然数,将差的各数字再重新排列,又形成一个最大数和最小数,最大数和最小数相减,其差还是自然数。反复进行,直到差是一个神秘数6174(数学黑洞)结束。
Input
输入数据有多组,每组占一行,每行包含一个4位自然数N。输入文件直到EOF为止!
Output
对每组输入,输出有2行。第一行是所有差,以空格分隔,最后一个数后也有空格;第二行是差的个数。
Example Input
1000 1500 3000
Example Output
999 8991 8082 8532 6174 5 5085 7992 7173 6354 3087 8352 6174 7 2997 7173 6354 3087 8352 6174 6
Hint
Author
zlh
#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int n, i, j, t; char a[100][4], b[100][4], c[4]; while(~scanf("%s",c)) { n = 0; while(strcmp(c, "6174") != 0) { strcpy(a[n], c); for(i = 0; i < 4; i++) { for(j = 0; j < 4 - i - 1; j++) { if(a[n][j] < a[n][j+1]) { t = a[n][j]; a[n][j] = a[n][j+1]; a[n][j+1] = t; } } } for(i = 0; i < 4; i++) { j = 3 - i; b[n][j] = a[n][i]; c[i] = 0; } for(i = 3; i >= 0; i--) {c[i] += a[n][i] - b[n][i] + 48; if(c[i] < 48) {c[i - 1] -= 1;c[i] += 10;} } for(i = 0; i < 4; i++) { if(c[0] != 48) printf("%c",c[i]); else if(i!=0) printf("%c", c[i]); } printf(" "); n++; } printf("\n%d\n", n); } return 0; }