坑点分析:
1.输入数可能为6174
2.输入数可能小于4位
考察知识点归纳:
将输入整数"分解"后对各位分析操作再"合并"计算
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a,const void *b){//直接用qsort()快排函数就完事了(使代码简洁)
return *(int *)b-*(int *)a;
}
int main(void){
int i,n,N,wxx[4];//由于输入整数只有4位,又涉及到整数的分解与合并,故整数各位由整型数组储存更合适
scanf("%d",&N);
do{//由与开始的N4位相同时输出格式都一样故不需要特例输出
n=0;//n不要忘了每次初始化
while(N){//将开始的N或者每次的结果数分解
wxx[n++]=N%10;
N/=10;
}
for(i=n;i<4;i++)//由于输入整数的位数可能小于4,故将其余位补0(因为每次输出数都必须4位)
wxx[i]=0;
qsort(wxx,4,sizeof(int),cmp);//将各位数从大到小排序
printf("%d%d%d%d - %d%d%d%d = ",wxx[0],wxx[1],wxx[2],wxx[3],wxx[3],wxx[2],wxx[1],wxx[0]);//由于位数确定且较少,直接输出就完事(不用循环)
N=(wxx[0]*1000+wxx[1]*100+wxx[2]*10+wxx[3])-(wxx[3]*1000+wxx[2]*100+wxx[1]*10+wxx[0]);//由于位数确定且较少,直接算就完事(不用循环)
printf("%04d\n",N);//输出结果值(结果值还是用N储存,以便循环)(%04d结果数不足位直接补0非常方便)
}while(N!=0&&N!=6174);//由于开始的N可能就为6174无法进入循环(题目要求是结果数为6174),故使用do{}while();结构
return 0;
}