`
0769
  • 浏览: 83689 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

转-超高精度算阶乘(快速) 雨中飞燕之家

阅读更多

超高精度算阶乘(快速)


 
//以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计算阶乘(递归&循环)].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码7--[scratch计算阶乘(递归&循环)...

    labview对(m-n)求阶乘

    用labview8.5对(m-n)求阶乘

    例3-19for求阶乘.zip

    标题“例3-19for求阶乘.zip”暗示了一个编程示例,它使用了“for”循环来计算阶乘。阶乘是一个数学概念,在计算机科学中经常被用于各种算法和计算,特别是在组合数学和概率论中。阶乘定义为一个正整数n的阶乘是所有...

    基础算法-python递归求阶乘和

    【基础算法】-python递归求阶乘和阶乘:是指从1到n的连续自然数相乘的积。负数没有阶乘。递归:函数作为一种代码封装,除了被其他程序正常调用外,还可以被函数内部代码调用。函数定义中调用函数自身的方式称为递归...

    n的阶乘问题--阶乘位数--阶乘末尾0的个数

    这个估算可以帮助我们快速预估大数阶乘的位数。 至于“阶乘末尾0的个数”,这与2和5的倍数有关。因为10=2×5,所以一个数的阶乘末尾零的个数取决于它包含2的因子和5的因子的数目。由于2的因子通常比5的因子多,因此...

    c程序-求1000的阶乘

    该程序能求出0-2000的阶乘,使用链表实现,能动态的扩充存储结果。。。。。

    网络游戏-在D-PHY与N阶乘终端网络之间共享硬件资源.zip

    标题中的“网络游戏-在D-PHY与N阶乘终端网络之间共享硬件资源”涉及的是通信技术在网络游戏中的应用,特别是如何高效地利用硬件资源。D-PHY(Digital Phyiscal Layer)是MIPI Alliance制定的一种高速串行接口标准,...

    C语言实现1-10000的阶乘运算

    C语言实现1-10000的阶乘运算 在计算机科学中,阶乘是一种基本的数学运算,通常用来计算一个数的所有因子。然而,在计算大数的阶乘时,通常会遇到溢出问题,即计算结果超过了计算机中整数的最大值。在本文中,我们将...

    程序设计-python案例-阶乘函数

    python零基础初学者 体验程序

    Factorial (双)阶乘快速计算器

    总的来说,"Factorial (双)阶乘快速计算器"是一款专注于高效且高精度的阶乘和双阶乘计算的工具,适合于需要快速处理阶乘问题的用户,无论是学生、教师还是研究人员。其背后的核心算法和大数运算机制使得它能够应对大...

    4--[scratch算法练习阶乘求和].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码

    4--[scratch算法练习阶乘求和].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码4--[scratch算法练习阶乘求和].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码4--[scratch算法练习阶乘求和].zip源码...

    求n!输出1-N的阶乘

    求n!输出1-N的阶乘.c语言,一个.cpp文件

    例3-17dowhile求阶乘.zip

    标题“例3-17dowhile求阶乘.zip”指的是一个压缩文件,其中包含了一个使用do-while循环计算阶乘的示例程序。在编程中,阶乘是一个数的所有小于等于该数的正整数相乘的结果,通常表示为n!。这个例子可能是一个C++或...

    e语言-易语言取双阶乘模块

    资源介绍:易语言取双阶乘模块源码资源作者:易语言自学网资源下载:

    高精度阶乘才c代码

    - 效率问题:该算法的效率并不高,对于非常大的`n`,可能会有性能瓶颈,可以考虑使用更高效的高精度乘法算法,如Karatsuba乘法或快速傅里叶变换(FFT)。 总的来说,这段代码提供了一个基础的高精度阶乘计算方法,...

    递归分治-1-阶乘.cpp

    递归分治-1-阶乘.cpp

    用高精度算N阶乘,编程语言c++,acm经典题型之一...

    本题目的核心是利用C++来实现一个高精度算法,计算任意整数N的阶乘。这个任务不仅考验了编程技巧,还涉及到了数学、算法和数据结构。 首先,我们要理解阶乘的定义:n的阶乘表示为n!,是所有小于等于n且大于0的...

    高精度加减乘除阶乘 C语言描述

    本文将深入探讨使用C语言实现的高精度算法,包括高精度加法、减法、乘法、除法以及阶乘的计算。 首先,让我们来看看高精度加法。在标准的C语言中,整数类型如int或long long有一定的表示范围限制,对于超出这个范围...

    c代码-求1的阶乘+2的阶乘+3的阶乘+...100的阶乘

    在编程领域,阶乘是一个常见的数学概念,通常用于计算组合数和解决递归问题。阶乘表示一个正整数n的所有小于等于n的正整数的乘积,表示为n!。例如,5!(5的阶乘)等于5 × 4 × 3 × 2 × 1 = 120。在给定的标题和...

    求阶乘-c#编写的求阶乘的程序

    总的来说,"求阶乘-c#编写的求阶乘的程序"是一个很好的学习资源,它可以帮助初学者巩固基础,锻炼逻辑思维,同时也能让他们接触到递归这种高级编程技术。通过编写和运行这样的程序,不仅可以学习到C#语言,还能提升...

Global site tag (gtag.js) - Google Analytics