失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 枚举算法:试统计正整数n的阶层n!=1*2*...*n尾部连续零的个数。

枚举算法:试统计正整数n的阶层n!=1*2*...*n尾部连续零的个数。

时间:2021-06-24 06:53:10

相关推荐

枚举算法:试统计正整数n的阶层n!=1*2*...*n尾部连续零的个数。

试统计正整数n的阶层n!=12…*n尾部连续零的个数。

思路:

首先通过常用对数累加和s=lg2+lg3+…+lg n确定n!的位数m=s+1,即a数组元素的个数。设计两重循环,模拟整数竖式乘法实施各数组元素的累乘:乘数k依次为2,3,…,n。累乘积各位存入aj。实施乘运算:t=a[j]*k+g;a[j]=t%10;g=t/10;尾部连续零的个数统计:从j=1时低位a[j]开始,a[j]=0时j++;做统计,直到a[j]!=0时结束。

流程图:

代码:

#include<time.h>#include<math.h>#include<stdio.h>int main() {double op,ed;double time;op=clock();int j,k,m,n,a[40000];long g,t;double s;printf("请输入正整数n(n<10000):");scanf("%d",&n);s=0;for(k=2; k<=n; k++)s+=log10(k);m=(int)s+1;for(k=1; k<=m; k++)a[k]=0;a[1]=1;g=0;for(k=2; k<=n; k++) {for(j=1; j<=m; j++) {t=a[j]*k+g;a[j]=t%10;g=t/10;}}j=1;while(a[j]==0)j++;printf("%d!尾部连续零共%d个。\n",n,j-1);ed=clock();time=ed-op;printf("\n");printf("time=%lfms\n",time);return 0;}

结果:

如果觉得《枚举算法:试统计正整数n的阶层n!=1*2*...*n尾部连续零的个数。》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。