//以10进制输出结果,本程序计算1000!用时不到50ms
#include <stdio.h>
#include <conio.h>
#include <time.h> //用于计时
#define MaxNum 10000 //阶乘最大的数(最高位数)
//如果要算更大的n!请自行修改此值
void LargeNumberTimes(long *num,long &nMax,long nTimes)
{
long z1,z2,z3=0;
for(z1=0;z1<=nMax;z1++)
{
if((z2=num[z1]*nTimes+z3)>=10000)
{
z3=z2/10000,z2%=10000;
if(z1==nMax)nMax++;
}
else z3=0;
num[z1]=z2;
}
}
int main()
{//雨中飞燕之作;
long n,n1,nt,nMax=0,n0=0,n5=0,nc2=-10,nMod5,num[MaxNum]={1};
scanf("%d",&n);//输入n,求n!
long t=clock();//开始计时
for(nMod5=n1=2;n1<=n;n1++,nMod5++)
{
if(nMod5==10)n0++,nc2++,nt=n1/10,nMod5=0;else
if(nMod5==5)
{
n0++,nt=n1/5;
while(nt%5==0 && nt)n0++,nt/=5;
}
else nt=n1;
while(n0>=nc2 && (nt&1)==0 && nt)nc2++,(nt>>=1);
if(nt>1)LargeNumberTimes(num,nMax,nt);
}
if((nc2+=10)>n0)LargeNumberTimes(num,nMax,(1<<(nc2-n0)));
t=clock()-t;//结束计时
printf("%d",num[nMax]);//输出计算结果
for(n1=nMax-1;n1>=0;n1--)printf("%04d",num[n1]);
for(n1=0;n1<n0;n1++)printf("0");printf("\n");
printf("Time = %d ms",t);//输出用时
getch();return 0;
}
相关推荐
7--[scratch计算阶乘(递归&循环)].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码7--[scratch计算阶乘(递归&循环)].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码7--[scratch计算阶乘(递归&循环)...
用labview8.5对(m-n)求阶乘
标题“例3-19for求阶乘.zip”暗示了一个编程示例,它使用了“for”循环来计算阶乘。阶乘是一个数学概念,在计算机科学中经常被用于各种算法和计算,特别是在组合数学和概率论中。阶乘定义为一个正整数n的阶乘是所有...
【基础算法】-python递归求阶乘和阶乘:是指从1到n的连续自然数相乘的积。负数没有阶乘。递归:函数作为一种代码封装,除了被其他程序正常调用外,还可以被函数内部代码调用。函数定义中调用函数自身的方式称为递归...
这个估算可以帮助我们快速预估大数阶乘的位数。 至于“阶乘末尾0的个数”,这与2和5的倍数有关。因为10=2×5,所以一个数的阶乘末尾零的个数取决于它包含2的因子和5的因子的数目。由于2的因子通常比5的因子多,因此...
该程序能求出0-2000的阶乘,使用链表实现,能动态的扩充存储结果。。。。。
标题中的“网络游戏-在D-PHY与N阶乘终端网络之间共享硬件资源”涉及的是通信技术在网络游戏中的应用,特别是如何高效地利用硬件资源。D-PHY(Digital Phyiscal Layer)是MIPI Alliance制定的一种高速串行接口标准,...
C语言实现1-10000的阶乘运算 在计算机科学中,阶乘是一种基本的数学运算,通常用来计算一个数的所有因子。然而,在计算大数的阶乘时,通常会遇到溢出问题,即计算结果超过了计算机中整数的最大值。在本文中,我们将...
python零基础初学者 体验程序
总的来说,"Factorial (双)阶乘快速计算器"是一款专注于高效且高精度的阶乘和双阶乘计算的工具,适合于需要快速处理阶乘问题的用户,无论是学生、教师还是研究人员。其背后的核心算法和大数运算机制使得它能够应对大...
4--[scratch算法练习阶乘求和].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码4--[scratch算法练习阶乘求和].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码4--[scratch算法练习阶乘求和].zip源码...
求n!输出1-N的阶乘.c语言,一个.cpp文件
标题“例3-17dowhile求阶乘.zip”指的是一个压缩文件,其中包含了一个使用do-while循环计算阶乘的示例程序。在编程中,阶乘是一个数的所有小于等于该数的正整数相乘的结果,通常表示为n!。这个例子可能是一个C++或...
资源介绍:易语言取双阶乘模块源码资源作者:易语言自学网资源下载:
- 效率问题:该算法的效率并不高,对于非常大的`n`,可能会有性能瓶颈,可以考虑使用更高效的高精度乘法算法,如Karatsuba乘法或快速傅里叶变换(FFT)。 总的来说,这段代码提供了一个基础的高精度阶乘计算方法,...
递归分治-1-阶乘.cpp
本题目的核心是利用C++来实现一个高精度算法,计算任意整数N的阶乘。这个任务不仅考验了编程技巧,还涉及到了数学、算法和数据结构。 首先,我们要理解阶乘的定义:n的阶乘表示为n!,是所有小于等于n且大于0的...
本文将深入探讨使用C语言实现的高精度算法,包括高精度加法、减法、乘法、除法以及阶乘的计算。 首先,让我们来看看高精度加法。在标准的C语言中,整数类型如int或long long有一定的表示范围限制,对于超出这个范围...
在编程领域,阶乘是一个常见的数学概念,通常用于计算组合数和解决递归问题。阶乘表示一个正整数n的所有小于等于n的正整数的乘积,表示为n!。例如,5!(5的阶乘)等于5 × 4 × 3 × 2 × 1 = 120。在给定的标题和...
总的来说,"求阶乘-c#编写的求阶乘的程序"是一个很好的学习资源,它可以帮助初学者巩固基础,锻炼逻辑思维,同时也能让他们接触到递归这种高级编程技术。通过编写和运行这样的程序,不仅可以学习到C#语言,还能提升...