题目注意点
- 对数字排序时转为数组,数字相减时转为数字
- 读入的时候必须是数字,因为用数组读入小于4位的数字时会出现问题
- 输出时注意不足4位数的数字要在前面补0
实现
#include <stdio.h>
#include <algorithm>
using namespace std;
int res[4];
bool cmp(int a, int b) {
return a > b;
}
int arrayToNum(int *a) {
int ans = 0;
for (int i = 0; i < 4; i++) {
ans = ans * 10 + a[i];
}
return ans;
}
void numToArray(int n) {
for (int i = 0; i < 4; i++) {
res[3 - i] = n % 10;
n /= 10;
}
}
int diffNum(int *a) {
int big, sml, diff;
sort(a, a+4, cmp);
big = arrayToNum(a);
sort(a, a+4);
sml = arrayToNum(a);
diff = big - sml;
printf("%04d - %04d = %04d\n", big, sml, diff);
return diff;
}
int main(){
int diff;
scanf("%d", &diff);
numToArray(diff);
diff = diffNum(res);
while (diff != 6174 && diff != 0) {
numToArray(diff);
diff = diffNum(res);
}
return 0;
}