【~~~】POJ_1775

本文介绍了一个使用C语言实现的程序,该程序通过预计算数的阶乘并将所有可能的阶乘之和标记,来判断一个给定的整数是否可以表示为若干个数的阶乘之和。通过这种方法,可以快速响应用户的输入并给出判断结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

记录每一个加上一个数阶乘

ps:0的阶乘是1

 

#include <stdio.h>

 

char flag[1000001];

long int fact[10];

 

int main ()

{

    long int n, i, j, last;

    fact[0] = 1;

    for (i = 1; i < 10; i++)

        fact[i] = fact[i - 1] * i;

    flag[0] = 1;

    for (i = 1; i <= 1000000; i++)

        flag[i] = 0;

    last = 0;

    for (i = 0; i < 10; i++)

    {

        for (j = last; j >= 0; j--)

        {

            if (flag[j] == 1 && j + fact[i] <= 1000000)

                flag[j + fact[i]] = 1;

        }

        last += fact[i];

    }

    flag[0] = 0;

    while (1)

    {

        scanf("%ld", &n);

        if (n < 0)

            break;

        if (flag[n] == 1)

            printf("YES\n");

        else

            printf("NO\n");

    }

    return 0;

}

转载于:https://www.cnblogs.com/zuckerTT/archive/2011/09/24/2189813.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值