Universe7的神奇数

Universe7的神奇数
描述
Universe7从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的三位数145,这个数,它的各个位数的阶乘之和等于它本身。
啊哈,真是巧啊。Universe7非常喜欢这种数,由于他的发现,所以这里我们命名其为Universe7的神奇数。但是要判断这样的数还是有点麻烦啊,那么现在请你找出在当前范围内( [1, 21474836] )所有的Universe7的神奇数吧。
我们认为0的阶乘等于1.
输入
no input
输出
输出所有Universe7的神奇数,每个数占一行。

#include<stdio.h>
int main()
{
    int n,m;
    int a[105];
        int i,j,t;
    while(~scanf("%d%d",&n,&m))
    {
        int sum=0,cnt=0;
        for(i=0; i<n; i++)
            scanf( "%d",&a[i]);
        for(j=0; j<n; j++)
            for(i=0; i<n-1-j; i++)
                if(a[i]>a[i+1])
                {
                    t=a[i];
                    a[i]=a[i+1];
                    a[i+1]=t;
                }
        for(i=0; i<n; i++)
        {
            sum+=a[i];
            if(sum<=m)
                cnt++;
        }
        printf("%d\n",cnt);
    }
    return 0;
}

第2种办法

#include<stdio.h>
int fun(int n)
{
    if(n==0)
    {
        return 1;
    }
    return fun(n-1)*n;
}
int fun1(int n)
{
    if(n==0)
    {
        return 1;
    }
    return fun1(n-1)*10;
}
int main()
{
    int sum=0;
    int n=1;
    int i=0;
    int j=0;
    for(n=1; n<8; n++)
    {
        int p=fun1(n);
        int q=fun(9);
        for(i=fun1(n-1); i<p&&i<n*q; i++)
        {
            sum=0;
            j=i;
            while(j)
            {
                sum+=fun(j%10);
                j/=10;
                if(sum>i)
                {
                    break;
                }
            }
            if(i==sum)
            {
                printf("%d\n",sum);
            }
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值