//PAT1019V1
#include
int FeiDiZeng(int n){
int a[4];
a[0]=n%10; //ge
a[1]=n/10%10; //shi
a[2]=n/100%10; //bai
a[3]=n/1000; //qian
int tmp,i,j;
for(i=0;i<3;i++){
for(j=i+1;j<4;j++){
if(a[i]<a[j]){ //a[0] is max
tmp=a[j];
a[j]=a[i];
a[i]=tmp;
}
}
}
return a[0]*1000+a[1]*100+a[2]*10+a[3];
}
int FeiDiJian(int n){
int a[4];
a[0]=n%10; //ge
a[1]=n/10%10; //shi
a[2]=n/100%10; //bai
a[3]=n/1000; //qian
int tmp,i,j;
for(i=0;i for(j=i+1;j if(a[i]>a[j]){
tmp=a[j];
a[j]=a[i];
a[i]=tmp;
}
}
}
return a[0]*1000+a[1]*100+a[2]*10+a[3];
}
int main(){
int n,a[4];
scanf("%d",&n);
a[0]=n%10; //ge
a[1]=n/10%10; //shi
a[2]=n/100%10; //bai
a[3]=n/1000; //qian
// if(a[0]==a[1]==a[2]==a[3]){ //debug
if(a[0]==a[1]&&a[1]==a[2]&&a[2]==a[3]){
printf("%d - %d= 0000",n,n);
}
else{
int FDZ=FeiDiZeng(n),FDJ=FeiDiJian(n);
while(FDZ-FDJ!=6174){
const int result=FDZ-FDJ;
printf("%04d - %04d = %04d\n",FDZ,FDJ,result);
FDZ=FeiDiZeng(result);
FDJ=FeiDiJian(result);
}
printf("%04d - %04d = %04d\n",FDZ,FDJ,FDZ-FDJ);
}
}
ERROR 1:这里代码的for写错了
int FeiDiJian(int n) {
int a[4];
a[0] = n % 10; //ge
a[1] = n / 10 % 10; //shi
a[2] = n / 100 % 10; //bai
a[3] = n / 1000; //qian
int tmp, i, j;
for (i = 0; i < 3;i++ ) {
for (j = i + 1; j < 4; j++) {
if (a[i] > a[j]) {
tmp = a[j];
a[j] = a[i];
a[i] = tmp;
}
}
}
return a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
}
ERROR2:测试点0格式错误:注意等号前面有个空格
if (a[0] == a[1] && a[1] == a[2] && a[2] == a[3]) {
printf("%d - %d = 0000", n, n);
}
这道题把数字当做来处理也比较简单字符串:https://blog.csdn.net/qq_40946921/article/details/81121123