您的位置:首页 > 其它

POJ 1775 Sum of Factorials(数论)

2015-08-25 13:00 363 查看
Description

判断一个数是否能够被表示为多个数阶乘的和

Input

多组输入,每组一个非负数n(n<=1000000),以负数结束输入

Output

对于每组输入,判断其是否能被表示为多个阶乘的和,能则输出YES,不能则输出NO

Sample Input

9

-1

Sample Output

YES

Solution

因为1!+2!+3!<4!,这情况的成立,所以如果这个数能够表示成为多个数的阶乘,那么我们可以转换为这个数减去他能减掉的最大的阶乘的数是否能被表示,因为n最大为1000000,所以首先打个1~10的阶乘表

Code

#include<stdio.h>
int main()
{
int a[12],n;
a[0]=1;
for(int i=1;i<11;i++)//打表
a[i]=a[i-1]*i;
while(scanf("%d",&n)&&n>=0)
{
if(n==0)//0显然不满足条件
{
printf("NO\n");
continue;
}
for(int i=10;i>=0;i--)
if(n>=a[i])//能减就减
n-=a[i];
if(n==0) printf("YES\n");//满足条件
else printf("NO\n");//不满足条件
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: