阶乘之和-南阳OJ-71题

来源:互联网 发布:linux shell编程pdf 编辑:程序博客网 时间:2024/05/19 20:39
这个博客好久不用了,或者说就没用过,今天再次重新拿出他,因为网易博客太糟心,实在写不下去,就在这写博客吧。

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

#include"stdio.h"int main(){    int fact[9] = {1,2,6,24,120,720,5040,40320,362880};    int n , m;    scanf("%d" , &m);    while(m--)    {        scanf("%d" , &n);        for(int i=8 ; i>=0 ; i--)            if(n >= fact[i])                n -= fact[i];        if(n)            printf("No\n");        else            printf("Yes\n");    }    return  0;}

不过有一点值得反思的是,明明直接赋值能搞定的事,为什么非要写个循环呢?不是说循环不好,只是说自己没有去考虑直接赋值这个点,这样就不好了。算法的原理好像是数论里面的,这个抽时间我想单独学习,数论!
行了,晚安。

原创粉丝点击