【NYOJ-91】 阶乘之和

来源:互联网 发布:淘宝上买c10a配件违法 编辑:程序博客网 时间:2024/05/21 09:33


点击打开链接


                                                                               阶乘之和

                                                                                                         时间限制: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

//                10的阶乘3000000多,所以只用算到9的阶乘;

//                一种简单的思路是从大了往下减,减完剩下的数再比阶乘大了再减,如果n  ==  0  则Yes

//代码如下:

#include <cstdio>int main(){int m;int a[77];scanf ("%d",&m);int fun (int n);while (m--) { int n; scanf ("%d",&n); for (int i = 1 ; i < 10 ; i++)   {    a[i-1] = fun(i);  }for (int j = 8 ; j >= 0 ; j--)  {     if (n >= a[j])       {         n = n - a[j];   }  } if (n == 0)   printf ("Yes\n"); else   printf ("No\n"); }return 0;}int fun (int n){int mul = 1;for (int i = 1 ; i <= n ; i++)  mul *= i;return mul;}




原创粉丝点击