第三届程序设计大赛 阶乘之和
Time Limit:1000MS Memory Limit:65536K
Total Submit:554 Accepted:329
Description
给你一个非负数整数N,判断N是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No
Input
第一行有一个整数M(0 < M < 100)表示有M组测试数据;
每组测试数据有一个正整数N(0 < N <= 100000);
Output
如果符合条件,输出Yes,否则输出No;
Sample Input
3
24
29
31
Sample Output
Yes
No
Yes
slove:
#include<stdio.h>
void main()
{
long int a[100],b[100];
int i,j,m,z,x,k;
scanf("%d",&m);
for(i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<m;i++)
{
z=0;
x=1;
for(j=0;j<=a[i];j++)
{
b[j]=x;
x=x*(j+1);
if(x>=a[i])
{
for(k=j;k>0;k--)
{
if(a[i]==b[k])
{
z=1;
break;
}
else if(a[i]-b[k]>0)
{
a[i]=a[i]-b[k];
}
}
}
}
if(z)
printf("Yes\n");
else
printf("No\n");
}
}