想问一下,为什么PAT乙级1019测试点2通不过,说明我的代码哪里有问题,修改后能通过测试点2的,优先采纳

PAT 乙级 1019 千名教师建设,万道高质量题目,百万用户拼题的程序设计实验辅助教学平台 https://pintia.cn/problem-sets/994805260223102976/problems/994805302786899968

img

img

img

我的代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

bool cmp(int a, int b)
{
    return a > b;
}

int main()
{
    int a, res[10];
    cin >> a;
    
    if (a == 6174) printf("7641 - 1467 = 6174\n");
    
    int z = a;
    int j = 0;
    while (z)
    {
        res[j ++ ] = z % 10;
        z /= 10;
    }
    
    bool flag = false;
    for (int n = 0; n < j; n ++ )
        if (res[n] != res[0])
        {
            flag = true;
            break;
        }
    
    memset(res, 0, sizeof res);
            
    
    if (!flag) printf("%d - %d = 0000", a, a);
    else
    {
        while (a != 6174)
        {
            int i = 0, x, y;
            while (a)
            {
                res[i ++ ] = a % 10;
                a /= 10;
            }
            sort(res, res + 4, cmp);
            x = res[0] * 1000 + res[1] * 100 + res[2] * 10 + res[3];
            y = res[3] * 1000 + res[2] * 100 + res[1] * 10 + res[0];
            
            a = x - y;
            
            printf("%04d - %04d = %04d\n", x, y, a);
            memset(res, 0, sizeof res);
        }
    }
    
    return 0;
}


#include<iostream>
#include<string.h>  //string
#include<algorithm>  //sort
#include<math.h>  //pow
using namespace std;
 
int main()
{
  string str;
  int a[4]={0,0,0,0};
  int d=0,x=0,cha=0;  //较大值 较小值初始化  输入值
  cin>>str;
  int len=str.length();
  for(int i=0;i<len;i++){
    a[i]=str[i]-'0';
  }
  
  if (a[1]==a[2]&&a[2]==a[3]&&a[3]==a[0])  {
      cout<<str<<" - "<<str<<" = "<<"0000";     //这样写如果0000不带引号的话,第一个测试点错误   
     // printf("%04d - %04d = %04d\n",a[0]*1111,a[0]*1111,0);
      
     }
  else{
    while(cha!=6174)
    {
      sort(a,a+4,greater<int>());
    
      
      
        for(int i=0;i<4;i++){
          d=10*d+a[i];
          x=10*x+a[3-i];   //注意789  应该表示为0789
        }
        cha= d-x;
       // cout<<d<<" - "<<x<<" = "<<cha<<endl;   //可能是3210-123   格式错误
        printf("%04d - %04d = %04d\n",d,x,cha);
        
        a[3]=cha%10;
        a[2]=(cha/10)%10;
        a[1]=(cha/100)%10;
        a[0]=cha/1000;
        d=0;
        x=0;
      
    }
  }
  
  return 0;
}