4 条题解

  • 0
    @ 2023-10-7 23:00:12
    #include<stdio.h>
    int main(){
        int n,m;
        scanf("%d",&n);
        while(n--)
        {
            int a[9]={1,2,6,24,120,720,5040,40320,362880};//分别求出1~9的阶乘,存入数组中。
            scanf("%d",&m);输入m.
            int t=0,i;t用来判断是否为阶乘之和数,1表示是阶乘之和数,0表示不是阶乘之和数。
            for(i=8;i>=0;i--)
            {
                if(m>=a[i])
                {
                    m-=a[i];
                }由小到大遍历数组,如果m大于其中一个元素,那就减去这个元素。
                if(m==0)
                {
                    t=1;
                    break;
                }如果最后m减完结果为0,就为阶乘之和数。
            }
            if(t==1)
            {
                printf("Yes\n");
            }
            else
            {
                printf("No\n");
            }
        }
        return 0;
    }
    

    信息

    ID
    157
    时间
    3000ms
    内存
    128MiB
    难度
    8
    标签
    (无)
    递交数
    1212
    已通过
    203
    上传者