PAT-A1069,題目地址:https://www.patest.cn/contests/pat-a-practise/1069
這道題比較簡單,只要把整個過程都模擬出來就可以了。值得注意的點:
- 最后的輸出要求必須是4位數(shù)格式,不足的前面補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); //數(shù)組默認初始化為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循環(huán)是最好的,連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;
}