文章

10

粉丝

399

获赞

13

访问

96.3k

头像
阶乘处理&&循环求和
P1278 上海交通大学机试题
发布于2020年3月10日 17:23
阅读数 9.7k

这个题是入门题,我认为有两个关键点:一是看到阶乘,我第一反应就是打表,因为阶乘的运算耗时太久,一看n的取值1000000,就觉得可行,我看有些朋友用的自定义阶乘函数打表,我觉得不如直接手动算出阶乘,输入数组。第二不是很重要,这里要求找是否能够通过求值得到,作差是一个常见的方法,在涉及数组求和的题中,作差其实很常见。

这里他这个英文题干,实际上没有太清楚,没有提到x是否可以重复,如果可以的话,这里的for循环就需要多重循环。还有要注意就是0的阶乘是1.

#include<iostream>
using namespace std;
void fac(int a){
  int b[9]={1,2,6,24,120,720,5040,40320,362880};
	for(int i=8;i>=0;i--){
	if(a>=b[i]) a-=b[i];
	}
  if(a==0) cout<<"YES"<<endl;
	else cout<<"NO"<<endl;
}
int main(){
	int a;
	while(cin>>a){
	fac(a);
	}
	
return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发