#include<stdio.h>
void swap(int *A,int *B);
void sort(int n[],int num);
int main(){
int n[4]={},num=0,i=0,temp=0,a=0,b=0;
scanf("%d",&num);
temp=num;
do{
for(i=0;i<4;i++){
n[i]=num%10;
num=num/10;
}
if(n[0]==n[1]&&n[1]==n[2]&&n[2]==n[3]){
printf("%04d - %04d = 0000\n",temp,temp);
break;
}
sort(n,4);
a=b=0;//易错点!!!!!
for(i=0;i<4;i++){
a=a*10+n[i];
b=b*10+n[3-i];
}
num=b-a;
printf("%04d - %04d = %04d\n",b,a,num);
}while(num!=6174);
return 0;
}
void swap(int *A,int *B){
int t;
t=*A;
*A=*B;
*B=t;
}
void sort(int n[],int num){
int i,j;
for(i=num-1;i>=0;i--){
int flag=0;
for(j=0;j<i;j++){
if(n[j]>n[j+1]){
//swap(&n[j],&n[j+1]);
t=n[j]; //两种写法
n[j]=n[j+1];
n[j+1]=t;
flag=1;
}
}
if(flag==0) break;
}
}
总结:
1、读数字放到字符串的核心代码:n[i]=num%10
2、题目涉及排序,排序中的交换的两种写法都是正确的。注意写成交换函数时一定要用地址。
3、一直再找的错误是a和b没有恢复初始值0,浪费了很多时间。