判斷n是否為階乘之和

http://acm.nyist.net/JudgeOnline/problem.php?pid=91
給你一個(gè)非負(fù)數(shù)整數(shù)n,判斷n是不是一些數(shù)(這些數(shù)不允許重復(fù)使用,且為正數(shù))的階乘之和,如9=1!+2!+3!,如果是,則輸出Yes,否則輸出No;

思路:假設(shè)a<b<c;如果n=a!+b!+c!,則n=a!(1+ (a+1)(a+2)* *(b)+ (a+1)(a+2)* *(b)*(b+1)** *(c));
則n可以整除a!。可以看出,如果n是階乘之和,則從i=1開始遞增,如果n可以整除i,則n不斷除以i,直到遇到n不能整除i,則(n-1)一定可以整除i。

 
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
        int t;
        scanf("%d",&t);
        while(t--)
        {
           int num;
           scanf("%d",&num);
           int i=1;
           bool flag=true;
           while(num>1)
           {

               if(((num/i)*i)==num){
                num/=i;
               }
               else
               {
                    num--;
                    if(((num/i)*i)==num)
                    {
                         num/=i;
                    }
                    else{
                        flag=false;
                        break;
                    }
               }
                i++;
           }
           if(flag) printf("Yes\n");
           else printf("No\n");
        }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容