• C语言编程练习27:阶乘的和


    题目描述

    有些数可以表示成若干个不同阶乘的和。例如,9=1!+2!+3!。小明对这些数很感兴趣,所以他给你一个正整数n,想让你告诉他这个数是否可以表示成若干个不同阶乘的和。

    输入

    输入包含多组测试数据。每组输入为一个非负整数n(n<=1000000),当n为负数时,输入结束。

    输出

    对于每组输入,如果n可以表示成若干个不同阶乘的和,则输出YES,否则输出NO。

    样例输入 Copy

    9
    -1

    样例输出 Copy

    YES


    思路:先算出小于1000000的最大阶乘数T,然后把0到T的每个阶乘值存入数组。用输入的N依次减去小于它的阶乘值,如果最后差为0则为YES,否则为NO。
    #include <stdio.h>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    
    
    #include<cstdio>
    using namespace std;
    
    
    int main()
    {
    	int a[11];
    	int n,c=0;
    	a[0]=1;
    	for(int i = 1;i<11;i++)
    	{
    		a[i]=1;
    		for(int j = 1;j<=i;j++)
    		{
    			a[i] = a[i]*j;
    		}
    		if(a[i]>1000000)
    		{
    			c=i-1;
    			break;
    		}
    	}
    	while(scanf("%d",&n)!=EOF)
    	{
    		if(n<0)
    		{
    			break;
    		}
    		if(n==0)
    		{
    			printf("NO
    ");
    			continue;
    		}
    		for(int i = c ;i>=0;i--)
    		{
    			if(n>=a[i])
    			{
    				n=n-a[i];
    			}
    		}
    		if(n==0)
    		{
    			printf("YES
    ");
    		}
    		else
    		{
    			printf("NO
    ");
    		}
    	}
    	return 0;
    }
    
     
  • 相关阅读:
    LeetCode_143. 重排链表
    LeetCode_844. 比较含退格的字符串
    LeetCode116. 填充每个节点的下一个右侧节点指针
    1002. 查找常用字符
    贝叶斯定理(Bayes' theorem)的理解笔记
    汉明码
    超级好用 音乐可视化软件-Specinker
    安卓安装aidlearning
    windows下gcc的安装和使用
    ubuntu桌面配置
  • 原文地址:https://www.cnblogs.com/FantasticDoubleFish/p/14320636.html
Copyright © 2020-2023  润新知