8617 阶乘数字和
时间限制:500MS 内存限制:1000K 提交次数:224 通过次数:64
题型: 编程题 语言: C++;C
Description
我们知道一个数的阶乘n! = 1*2*……*n一般是一个很大的数。现在要计算的是一个数阶乘之后得出来的数所有位上的数字相加的和。
输入格式
输入为多case输入。每个case只有一行,输入一个正整数n(1<=n <= 50),当输入0时结束
输出格式
一个整数。
输入样例
5
2
0
输出样例
3

/*这里模拟了大数乘法来计算高精度阶乘*/ #include<stdio.h> #include<string.h> #define MAX 100 int main() { int f[MAX];/*通过修改数组大小可以计算更大的阶乘*/ int i,j,s,k,n,sum; while(1) { memset(f,0,sizeof(f)); f[0]=1;/*这个必须要有*/ sum=0; scanf("%d",&n); if(n==0) break; for(i=2; i<=n; i++) { k=0;/*k是进位*/ for(j=0; j<MAX; j++)//比如计算5!初始化结果 1 0 0 0 0 0 0 0。。。。 { //2分别乘以以上数字,得 2 0 0 0 0 0 0 0。。。。 s=i*f[j]+k; //3分别乘以以上数字,得 6 0 0 0 0 0 0 0。。。。 f[j]=s%10; //4分别乘以以上数字,得 4 2 0 0 0 0 0 0。。。。 k=s/10; //5分别乘以以上数字,得 0 2 1 0 0 0 0 0。。。。 } } for(i=MAX-1; i>=0; i--) if(f[i]) break;/*由于是逆序存放结果,应去除后面多余的0*/ for(j=i; j>=0; j--) sum+=f[j]; printf("%d\n",sum); } } /*很明显,这个算法是很不高效的,应为有很多次的沈余运算*/
2
Time:15ms
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧