给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;
标签:
给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;
2 9 10
Yes No
# include <stdio.h> int fac(int n); int main(void) { int i; int sfac[10]; for (i = 1; i <= 9; i++) { sfac[i] = fac(i); } int m; scanf("%d", &m); while (m--) { int n; scanf("%d", &n); int sum = 0; for (i = 9; i >= 1; i--) { if (sfac[i] <= n) { int flag = i; sum += sfac[i]; if (sum >= n) { if(sum == n) { break; } if (i != 0) { sum -= sfac[i]; i = flag; } } } } if (sum == n) { printf("Yes\n"); } else { printf("No\n"); } } return 0; } int fac(int n) { if (n == 1) return 1; else return n* fac( n-1); }
标签:
原文地址:http://www.cnblogs.com/tong69/p/5762652.html