题目描述
最近,小Q在数学兴趣课中了解了“卡布列克常数”。卡布列克是一位数学家,他在研究数字时发现:任意一个不是用完全相同数字组成的四位数,如果对它们的每位数字重新排序,组成一个最大的数和一个最小的数,然后用最大数减去最小数,差不够四位数时补零,类推下去,最后将变成一个固定的数:6174,这就是卡布列克常数。
例如:4321-1234=3087
8730-378=8352
8532-2358=6174
7641-1467=6174
……
小Q想,我能不能编程来验证呢?输入一个符合条件的四位数,然后验证运算过程。
输入
共1行,为任意一个不是用完全相同数字组成的四位数。
输出
变为卡布列克常数的运算过程,由若干行组成,每行是一个算式,不含空格。
样例输入
复制样例数据
4321
样例输出
4321-1234=3087
8730-378=8352
8532-2358=6174
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp(const void *a,const void *b)
{
return *(int*)b-*(int *)a;
}
int fun(int a[],int n)
{
int i,max=0,min=0;
for(i=0;i<4;i++)
{
max=max*10+a[i];
min=min*10+a[3-i];
}
printf("%d-%d=%d
",max,min,max-min);
if(max-min==6174)
return 0;
else
{
n=max-min;
for(i=0;i<4;i++)
{
a[i]=n%10;
n/=10;
}
qsort(a,4,sizeof(a[0]),cmp);
return fun(a,n);
}
}
int main()
{
int n,a[4],b,i;
scanf("%d",&n);
for(i=0;i<4;i++)
{
a[i]=n%10;
n/=10;
}
qsort(a,4,sizeof(a[0]),cmp);
b=fun(a,n);
return 0;
}
感觉自己的代码都挺复杂,哎哎 ,加油。