题意:求n!(0 ≤ N ≤ 10000)

思路:大数,用数组存储

1.首先要考虑数据N!的位数,因为最大是10000!,可以计算一下大概是5+9000*4+900*3+90*2+10*1=38865位,(此处没看懂,怎么求的)

可以开一个40000的int数组存放,然后用常规的方法去计算

2.但是需要改进一下,咱们知道int数组一个只存1位太浪费了,不如让它的空间发挥到极限,数组一个元素存一个不超过10^5的数,

为什么是10^5呢?见代码中的注释,改进后就一个元素存5位,这样开的数组就可以小5倍了,只需要8000就可以了

代码1:

#include<cstdio>
#include<cstring> const int N=40000;
int main(){
int ans[N];
int n,i,j,co,sum;
while(~scanf("%d",&n)){
memset(ans,0,sizeof(ans));
ans[0]=1;
for(i=2;i<=n;i++){
for(j=0,co=0;j<N;j++){//求阶乘
sum=ans[j]*i+co;//
ans[j]=sum%10;
co=sum/10;
}
}
for(i=N-1;ans[i]==0;i--);
printf("%d",ans[i]);
for(i--;i>=0;i--) printf("%d",ans[i]);
printf("\n");
}
return 0;
}

代码2:

#include<cstdio>
#include<cstring> const int N=8000;
int main(){
int ans[N];
int n,i,j,co,sum;
while(~scanf("%d",&n)){
memset(ans,0,sizeof(ans));
ans[0]=1;
for(i=2;i<=n;i++){
for(j=0,co=0;j<N;j++){//求阶乘
sum=ans[j]*i+co;//这里的sum决定了10^5,因为ans[j]<10^5,i<10^4,co<10^5,那么sum不会超出int范围;如果用10^6,则sum可能溢出。
ans[j]=sum%100000;
co=sum/100000;
}
}
for(i=N-1;ans[i]==0;i--);
printf("%d",ans[i]);
for(i--;i>=0;i--) printf("%05d",ans[i]);
printf("\n");
}
return 0;
}

最新文章

  1. 个推,手机推送API的使用
  2. Linux下Vi/Vim使用笔记
  3. storm-kafka组件中KafkaOffsetMetric相关统计指标说明
  4. BeanUtil体会
  5. COJ980 WZJ的数据结构(负二十)
  6. .Net需要掌握的知识
  7. 在唯一密钥属性“name”设置为“ScriptHandlerFactory”时,无法添加类型为“add”的重复集合项
  8. Ninject依赖注入——构造函数的注入
  9. JS加载时间线
  10. HTML5-draggable(拖放)
  11. SharePoint 2010 master page 控件介绍(2):ribbon (一同事读听着像泪奔)
  12. WPF ItemsControl 控件支持鼠标滚轮滑动
  13. 解决DataGridView.DataSource重复赋值而不显示问题
  14. POJ 3264-Balanced Lineup(段树:单点更新,间隔查询)
  15. 【one day one linux】find 用法详解小记
  16. PHP之this和self
  17. JS生成 UUID的方法
  18. Problem A: 重载字符的加减法
  19. Windows系统下安装zabbix客户端
  20. PM2来部署nodejs服务器永久开启

热门文章

  1. HDoj-1233-还是畅通project-prim算法
  2. css:颜色名和十六进制数值
  3. zabbix agent shell一键安装脚本
  4. js 显示当前系统时间
  5. 多媒体开发之rtp打包---打包中的FU-A分包方式说明
  6. 【BZOJ4276】[ONTAK2015]Bajtman i Okrągły Robin 线段树优化建图+费用流
  7. EasyPlayer RTSP Android安卓播放器实现视频源快速切换
  8. VC项目文件说明
  9. 九度OJ 1161:Repeater(复制器) (递归)
  10. Python爬虫-- BeautifulSoup库