1411111709-ny-阶乘之和



阶乘之和

时间限制:3000 ms  |  内存限制:65535 KB

难度:3

描述

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

输入
第一行有一个整数0<m<100,表示有m组测试数据;

每组测试数据有一个正整数n<1000000;

输出
如果符合条件,输出Yes,否则输出No;
样例输入
2
9
10
样例输出
Yes
No
解题思路
       阶乘和有个特点就是前n项和总比第n+1项小,这题就需要这个性质。
代码
#include<stdio.h>
long num[12];//因为n小于100000,所以10就足够,10!>100000
int main()
{
	int t,n;
	int i,j,k;
	num[1]=1;
	for(i=2;i<=12;i++)
		num[i]=i*num[i-1];
    scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		for(i=12;i>=1;i--)
			if(n>=num[i])
				n-=num[i];
		//因为不能重复使用,所以从大到小符合条件就减就好
		if(n==0)
			printf("Yes\n");
		else
			printf("No\n");
	}
	return 0;
}

时间: 2024-10-29 19:09:56

1411111709-ny-阶乘之和的相关文章

阶乘之和-----00003

描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No: 输入 第一行有一个整数0<m<100,表示有m组测试数据:每组测试数据有一个正整数n<1000000; 输出 如果符合条件,输出Yes,否则输出No; 样例输入 2 9 10 样例输出 Yes No

nyist 91 阶乘之和

阶乘之和时间限制:3000 ms | 内存限制:65535 KB 难度:3描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No: 输入第一行有一个整数0<m<100,表示有m组测试数据:每组测试数据有一个正整数n<1000000;输出如果符合条件,输出Yes,否则输出No;样例输入2910样例输出YesNo #include <stdio.h>int main( ){ int m

nyoj 91阶乘之和

阶乘之和 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No: 输入 第一行有一个整数0<m<100,表示有m组测试数据:每组测试数据有一个正整数n<1000000; 输出 如果符合条件,输出Yes,否则输出No; 样例输入 2 9 10 样例输出 Yes No #include "stdio.h"

数的阶乘之和

package nothh; public class mmm { public static void main(String[] args) { // TODO Auto-generated method stub //4到1的阶乘之和 int x = 0; int y = 0; int z = 4; while(z>=0) { x = z; for(int j = z - 1; j > 0; j--) { x = j * x; } z--; y = x+y; } System.out.p

C语言之函数调用02—一个三位数的正整数=它的各位数字的阶乘之和

//函数调用+枚举法 /* ========================================================== 题目:求一个三位数的正整数=它的各位数字的阶乘之和! 如:145=1!+4!+5!. ========================================================== */ #include<stdio.h> int J(int n) { int t=1,i; for(i=1;i<=n;i++) t*=i;

阶乘之和 输入n,计算S=1!+2!+3!+…+n!的末6位(不含前导0)。n≤10 6 ,n!表示 前n个正整数之积。

阶乘之和输入n,计算S=1!+2!+3!+…+n!的末6位(不含前导0).n≤10 6 ,n!表示前n个正整数之积.样例输入:10样例输出: package demo; import java.util.Scanner; public class demo02 { public static void main(String[] args) { Scanner in=new Scanner(System.in); int n=in.nextInt(); long sum=0; for (int

编写前n项阶乘之和.java

public class C3_17 {      public static void main(String[] args)     {             int n=1,m,s,k=0;             while(n<=8)         {                     for(s=1,m=1;m<n;m++)                 s=s*m;//计算n!,结果存于s中             k=k+s;//计算前n项阶乘之和,结果存于k中  

洛谷——P1009 阶乘之和

P1009 阶乘之和 题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结果. 输入输出样例 输入样例#1: 复制 3 输出样例#1: 复制 9 高精加+高精乘 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #d

洛谷 P1009 阶乘之和

P1009 阶乘之和 题目描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1. 输入输出格式 输入格式: 一个正整数N. 输出格式: 一个正整数S,表示计算结果. 输入输出样例 输入样例#1: 复制 3 输出样例#1: 复制 9思路:高精度加法+高精度乘法. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm

阶乘之和(防止int类型溢出的小技巧&amp;计时函数)

计算前n个正整数阶乘之和的后六位: 注意点是,用一个int类型储存阶乘之和时,要防止溢出 一,在每一次处理阶乘(fa)或者阶乘之和(s)时,都对10^6取余,这样最终结果不变,还避免了越界 二,计时函数可以用来观察程序执行时间 用法: printf("%f",(double)clock()/CLOCKS_PER_SEC); 代码: #include"iostream" #include"ctime" using namespace std; in