NYOJ-91-阶乘之和

http://acm.nyist.net/JudgeOnline/problem.php?pid=91

阶乘之和

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

解题思路: 预处理小于阶乘100W的,然后每个输入一个数n,将阶乘从大到小能减就减,最后判断是否等于0

 1 #include <stdio.h>
 2 #include <math.h>
 3 
 4 long long a[100], t;
 5 
 6 int main(){
 7     int n, m, i, j;
 8     a[0] = 1;
 9     i = 0;
10     while(a[i] < 1000000){
11         i++;
12         a[i] = a[i - 1] * i;
13     }
14     scanf("%d", &m);
15     while(m--){
16         scanf("%d", &n);
17         for(j = i - 1; j > 0; j--){
18             if(n >= a[j]){
19                 n -= a[j];
20             }
21         }
22         if(n == 0){
23             printf("Yes ");
24         }
25         else{
26             printf("No ");
27         }
28     }
29     return 0;

30 } 

原文地址:https://www.cnblogs.com/angle-qqs/p/4055060.html