nyoj阶乘之和



/*阶乘之和

时间限制:3000 ms  |  内存限制:65535 KB

难度:3

描写叙述

给你一个非负数整数n,推断n是不是一些数(这些数不同意反复使用,且为正数)的阶乘之和,

如9=1!

+2!+3!,假设是,则输出Yes,否则输出No。

输入第一行有一个整数0<m<100,表示有m组測试数据。

每组測试数据有一个正整数n<1000000;输出假设符合条件,输出Yes。否则输出No;例子输入2

9

10

例子输出Yes

No*/

<span style="font-size:18px;">#include<stdio.h>
int main()
{
int a[10];
int i;
int m,t;
int s = 1; a[0] = 0;
for(i = 1; i <= 9; ++i)
{
s *= i;
a[i] = s;
} scanf("%d",&t);
while(t--)
{
scanf("%d",&m);
for(i = 9; i >= 1; --i)
{
if(m >= a[i])
m -= a[i];
if(!m)
break;
}
if(!m)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}</span>
<span style="font-size:18px;">//这样的方法是不是非常奇芭呀。
#include<cstdio>
int main()
{
int facto[9]={1,2,6,24,120,720,5040,40320,362880},sum,i,m;
scanf("%d",&m);
while(m--)
{
scanf("%d",&sum);
for(i=8;i>=0;i--)//n阶乘比前面n-1阶乘和大
if(sum>=facto[i])
sum-=facto[i];
if(sum==0) printf("Yes\n");
else printf("No\n"); }
return 0;
} </span>
上一篇:Android中的Interpolator


下一篇:SQLSERVER用无中生有的思想来替代游标