阶乘之和 水

来源:互联网 发布:车床g41 g42编程实例 编辑:程序博客网 时间:2024/06/16 15:15


阶乘之和

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述

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

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



这个题有意思,先处理一下,会很好做。

10!=3628800>n;

把0~10的阶乘存一下。


#include<stdio.h>int pow1(int a){int sum=1;for(int i=1;i<a;i++){sum*=i;}return sum;}int main(){int a[11];a[0]=1;for(int i=1;i<11;i++)a[i]=pow1(i);int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int sum=0;for(int i=10;i>=0;i--){if(sum+a[i]<=n)sum+=a[i];if(sum==n)break;}if(sum==n)printf("Yes\n");elseprintf("No\n"); } return 0;}









原创粉丝点击