1. 程式人生 > >卡布列克常數

卡布列克常數

題目描述
最近,小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\n",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;
}

感覺自己的程式碼都挺複雜,哎哎 ,加油。