大数阶乘
思路:
数组模拟阶乘的过程,处理好进位的问题与优化的问题即可。
代码一如下:
1 //大数阶乘 2 #include<iostream> 3 #include<cstring> 4 #define N 17000 //此处只能计算到5000,如有需要,可以修改N 5 using namespace std; 6 void jiecheng(int n); 7 int ans[N]; 8 int main() 9 { 10 int n; 11 while(cin>>n) 12 { 13 jiecheng(n); 14 } 15 return 0; 16 } 17 18 void jiecheng(int n) 19 { 20 int i,j,len,t,temp; 21 memset(ans,0,sizeof(ans));//初始化 22 ans[0]=1; 23 len=1; 24 for(i=2;i<=n;i++) 25 { 26 t=0;//进位的标志 27 for(j=0;j<=len;j++)//逐个相乘 28 { 29 temp=ans[j]*i+t; 30 ans[j]=temp%10; 31 t=temp/10; 32 if(j==len&&t!=0)//渐进式增加,可以减少循环的次数 33 len++; 34 } 35 }
int k=len;
while(ans[k]==0&&k>=0)--k; 36 for(i=k;i>=0;i--)//输出 37 cout<<ans[i]; 38 cout<<endl; 39 }
代码二 (位压缩--5位)
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define N 10000 5 6 using namespace std; 7 8 int a[N]; 9 10 int main() 11 { 12 int n,t,i,j,k; 13 while(cin>>n) 14 { 15 memset(a,0,sizeof(a)); 16 a[0]=1;k=0; 17 for(i=2;i<=n;i++) 18 { 19 t=0; 20 for(j=0;j<=k;j++) 21 { 22 a[j]=a[j]*i+t; 23 t=a[j]/100000; 24 a[j]=a[j]%100000; 25 } 26 if(t>0) 27 { 28 k++;a[k]=t; 29 } 30 } 31 printf("%d",a[k]); 32 for(i=k-1;i>=0;i--) 33 { 34 printf("%05d",a[i]); 35 } 36 printf("\n"); 37 } 38 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix