卡布列克常数

题目描述
最近,小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;
}

感觉自己的代码都挺复杂,哎哎 ,加油。

原文地址:https://www.cnblogs.com/skyleafcoder/p/12319597.html