死循环,没找到自己程序问题在哪里,求大神指导
题目描述:假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个程序输出变化过程。比如输入1234执行顺序是1234->3087->8352->6174->6174
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define num 1100
int comp1(const void *_a, const void *_b)
{
int *a=(int*)_a;
int *b=(int*)_b;
return *b-*a;
}
int comp2(const void *_a, const void *_b)
{
int *a=(int*)_a;
int *b=(int*)_b;
return *a-*b;
}
void main(){
int n,i=0,j,sum1=0,sum2=0,newNum,l=0,newNums[num],a[num],b[num],k,s=0;
scanf("%d",&n);
newNums[l++]=n;
printf("%d",n);
while(s!=1){
while(n)
{
a[i++]=n%10;
n=n/10;
}
for(j=0;j<i;j++)
b[j]=a[j];
qsort(a,i,sizeof(int),comp2);
qsort(b,i,sizeof(int),comp1);
for(k=0;k<i;k++)
sum1+=a[k]*int(pow(10,k));
for(k=0;k<i;k++)
sum2+=b[k]*int(pow(10,k));
newNum=sum1-sum2;
for(k=0;k<l;k++)
{
if(newNums[k]==newNum)
break;
}
if(k<l)
{
printf("->%d",newNum);
s=1;
}
else
{
printf("->%d",newNum);
n=newNum;
i=0;
sum1=0;
sum2=0;
}
}
}