阶乘之和

来源:互联网 发布:赤狐crm软件下载 编辑:程序博客网 时间:2024/04/29 16:40

描述

给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;

输入
第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;
输出
如果符合条件,输出Yes,否则输出No;
样例输入
2910
样例输出
YesNo
思路:

      n<1000000,只要列出10以内的阶乘就可以了,但是要在一些数中找出几个数等于n让我不知所措

看了讨论区,才有了思路,其实很简单,举个栗子,假如n为7 ,往前找小的减,那么7-6=1,然后1-1==0

那么7 =6+1.

代码;

#include<iostream>#include<algorithm>#include<cstring>#include<stdio.h>using namespace std;int a[11]={1};void jc(int x){a[x]=a[x-1]*x;}int main(){int i,T,n;for (i=1;i<10;i++)  jc(i);cin>>T;while (T--){cin>>n;for (i=10;i>=1;i--){if (n-a[i]>=0){n=n-a[i];}if (n==0){cout<<"Yes"<<endl;break;}}if (n)  cout<<"No"<<endl;}    return 0;}


0 0