文章
10
粉丝
399
获赞
14
访问
100.8k
这个题是入门题,我认为有两个关键点:一是看到阶乘,我第一反应就是打表,因为阶乘的运算耗时太久,一看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;
}
登录后发布评论
暂无评论,来抢沙发