1060 - 阶乘的和

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

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

题目输入

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

题目输出

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

输入/输出样例

输入格式

9
-1

输出格式

YES

C语言解答

#include<stdio.h>

int main()
{
	int n,a[10]={1,1,2,6,24,120,720,5040,40320,362880},i;
	while(scanf("%d",&n)!=EOF,n>=0)
	{
		if(!n)
			puts("NO");
		else
		{
			for(i=9;i>=0;i--)
				if(n>=a[i])
					n-=a[i];
			puts(n?"NO":"YES");
		}
	}
	return 0;
}

C++解答

#include<stdio.h>

int main()
{
	int n,a[10]={1,1,2,6,24,120,720,5040,40320,362880},i;
	while(scanf("%d",&n)!=EOF,n>=0)
	{
		if(!n)
			puts("NO");
		else
		{
			for(i=9;i>=0;i--)
				if(n>=a[i])
					n-=a[i];
			puts(n?"NO":"YES");
		}
	}
	return 0;
}

Java解答


import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Scanner;
import java.math.*;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		// String[] zong = in.nextLine().split(" ");

		int[] k = {1,1,2,6,24,120,720,5040,40320,362880};

	//	System.out.println(k[9]);
		while (in.hasNext()) {
			String[] zong = in.nextLine().split(" ");
			int a = Integer.parseInt(zong[0]);
			if (a < 0) {
				break;
			}
			if (a == 0) {
				System.out.println("NO");
				continue;
			}
			
			for (int i = 9; i >= 0; --i){
				if (a >= k[i])
					a -= k[i];
			}
			if (a == 0)
				System.out.println("YES");
			else
				System.out.println("NO");
		
	}
	}

	public static int jc(int i) {
		int k = 0;
		if (i == 0) // 0的阶乘=1
			return 1;
		else if (i > 0) {// 0继续递归
			k = i * jc(i - 1);
		}
		return k;
	}
}

Python解答

fs=[1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
def issumfactorial(n,issum="NO"):
    global fs
    _fs=fs[:]
    while n and _fs!=[]:
        a=_fs.pop()
        if n>=a:
            n-=a
        if n==0:
            issum="YES"
    return issum
def main():
    n=input()
    while n>=0:
        print issumfactorial(n)
        n=input()
main()