PAT-A1069,题目地址:https://www.patest.cn/contests/pat-a-practise/1069
这道题比较简单,只要把整个过程都模拟出来就可以了。值得注意的点:
- 最后的输出要求必须是4位数格式,不足的前面补0.
- 对于输入本身<1000的要想想代码考虑到了没有
- 输入6174算是一个特例,有一个case的输入就是6174
代码如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
using namespace std;
int get_seq(int num, int order){ //order=1返回最小值,=0返回最大值
int a[4], count = 0, res = 0;
memset(a, 0, sizeof(int) * 4); //数组默认初始化为0, 这样如果输入<1000,就相当于自动补0了
while(num != 0){
a[count] = num % 10;
num /= 10;
count++;
}
sort(a, a+4);
if(order){
for(int i = 0; i <= 3; i++){
res = res * 10 + a[i];
}
}
else{
for(int i = 3; i >= 0; i--){
res = res * 10 + a[i];
}
}
return res;
}
int main(){
int num;
cin >> num;
bool flag = false;
//此处其实用do...while循环是最好的,连flag变量都省了
while((num != 6174 || !flag)&& num != 0){
int max = get_seq(num, 0);
int min = get_seq(num, 1);
num = max - min;
printf("%04d - %04d = %04d\n", max, min, num); //注意格式化输出的格式
flag = true;
}
return 0;
}