阶乘和数<C语言>

阶乘和数:
一个正整数如果等于组成它的各位数字的阶乘之和,该整数称为阶乘和数。

例如,145=1!+4!+5!,则145是一个三位阶详细和数。

请问:共有多少个阶乘和数? 数据范围 1<=x <= 1 e 7

输出:
所有的阶乘和数(按字典序,即1打头的在前,2打头的次之,…, 空格分隔)
(多加for循环,然后实现数字的从1打头的数字直至9打头的数字顺序打印)

问题思路:

#include<stdio.h>
long jc(int n);
void main()
{
    int a, b, c, d, e, f, g;
    long int m1, m2, m3, m4, m5, m6, n1, n2, n3, n4, n5, n6;
    for (a = 1; a <= 9; a++)
    {
        if (a == jc(a))
            printf("%d ", a);    /*一位数满足条件则输出*/
        for (b = 0; b <= 9; b++)                        //加用多个for函数循环的目的是保证题目中的打印顺序
        {
            m1 = a * 10 + b;
            n1 = jc(b) + jc(a);
            if (m1 == n1)
                printf("%ld ", m1);    /*两位数满足条件则输出*/
            for (c = 0; c <= 9; c++)
            {
                m2 = m1 * 10 + c;
                n2 = n1 + jc(c);
                if (m2 == n2)
                    printf("%ld ", m2);    /*三位数满足条件则输出*/
                for (d = 0; d <= 9; d++)
                {
                    m3 = m2 * 10 + d;
                    n3 = n2 + jc(d);
                    if (m3 == n2)
                        printf("%ld ", m3);    /*四位数满足条件则输出*/
                    for (e = 0; e <= 9; e++)
                    {
                        m4 = m3 * 10 + e;
                        n4 = n3 + jc(e);
                        if (m4 == n3)
                            printf("%ld ", m4);    /*五位数满足条件则输出*/
                        for (f = 0; f <= 9; f++)
                        {
                            m5 = m4 * 10 + f;
                            n5 = n4 + jc(f);
                            if (m5 == m4)
                                printf("%ld ", m5);    /*六位数满足条件则输出*/
                            for (g = 0; g <= 9; g++)
                            {
                                m6 = m5 * 10 + g;
                                n6 = n5 + jc(g);
                                if (m6 == n6)
                                    printf("%ld ", m6);    /*七位数满足条件则输出*/
                            }
                        }
                    }
                }
            }
        }
    }

}
long jc(int n)                             //用户自己定义阶乘函数
{
    int i;
    long s = 1;
    for (i = 1; i <= n; i++)
        s *= i;
    return s;
}
(注意到,7!=5040>999,所以7的阶乘为四位数不满足,)
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangzhiyuan88/article/details/79163517
个人分类: 算法题目
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭