题目1038:Sum of Factorials

千呼万唤死出来!!!!

此题的思路,多少有点接受不了,竟然让所给值逐一减去大值,再看所剩值是否为零来判断,

所以就需要一个值或数组来记录所有的阶乘和,那么问题来了,如何记录,如何求取。

我用的是num数组一边求取一边记录

还有一种利用外部函数int fact(int n)来调用的;

还有这种:需要眼力和经验

for(i = 1;i < 11;i ++){  
                number[i] = i * number[i -1]; } 

还有一种更绝的:简直无语!!!!!!!

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

再来AC 的代码:

 

#include <iostream>
using namespace std;

 

int main()
{
	int num[11];
	int i,j,n;
	 num[0] = 1;  
        for(i = 1;i < 11;i ++){  
                num[i] = i * num[i -1];  
        } 
	while(cin>>n)
	{
		if (n==0) {
	cout<<"NO"<<endl;continue;	}
		for (i=10;i>=0;i--)
		{
			if (n>=num[i])
			   n-=num[i];
		}
		if (n==0) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
		
	}
	return 0;
}
 

  


转载于:https://www.cnblogs.com/jianrenguo/p/6443296.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值