pat1019数字黑洞,有一个测试点过不去,大神们帮我看下哪错了?谢谢

 #include <stdio.h>
#include <stdlib.h>
int comp(const void *a,const void *b){
    return *(int*)a-*(int*)b;
}
int main(){
    int n,a[4]={0},i,x,y;
    scanf("%d",&n);
    do{
        i=0;
        while(n!=0){
            a[i]=n%10;
            n/=10;
            i++;
        }
        qsort(a,4,sizeof(int),comp);
        x=1000*a[3]+100*a[2]+10*a[1]+a[0];
        y=1000*a[0]+100*a[1]+10*a[2]+a[3];
        n=x-y;
        printf("%04d - %04d = %04d\n",x,y,n);
    }while(n!=6174&&n!=0);
    return 0;
}

http://blog.csdn.net/xtzmm1215/article/details/38444887

把中间的while循环改成
for(i=0;i<4;i++){
a[i]=n%10;

n=n/10;

}
就对了

#include
#include
#include
#include
using namespace std;
//字符串转数字
int string_int(string num1)
{
int res1;
stringstream ss;
ss << num1;
ss >> res1;
return res1;
}
//数字转字符串
string int_string(int num)
{
string res;
stringstream ss;
ss << num;
ss >> res;
return res;
}
//字符串排序
bool cmp(char a, char b) { return a > b; }
int main()
{
string str, str1, str2, str3, str4;
cin >> str;
while (str.size() < 4)
{
str = "0" + str;//在str1的前面加0,补足4位;若在str1后面加0,应写为str1 = str1+“0”;
}
str1 = str;
str2 = str;
sort(str1.begin(), str1.end());
sort(str2.begin(), str2.end(), cmp);
while (str2 != str1 && string_int(str2) - string_int(str1) != 6174)
{
str4 = int_string(string_int(str2) - string_int(str1));
while (str4.size() < 4)
{
str4 = "0" + str4;
}
cout << str2 << " - " << str1 << " = " << str4 << endl;
str1 = str4;
str2 = str4;
sort(str1.begin(), str1.end());
sort(str2.begin(), str2.end(), cmp);
}
if (str2 == str1)
cout << str2 << " - " << str1 << " = " << "0000" << endl;
else
cout << str2 << " - " << str1 << " = " << 6174 << endl;
return 0;
}