NYOJ 28 大数阶乘

来源:互联网 发布:淘宝字体侵权 编辑:程序博客网 时间:2024/06/08 11:14
链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=28

题目

描述

我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?

输入

输入一个整数m(0<m<=5000)

输出

输出m的阶乘,并在输出结束之后输入一个换行符

题解

  • 可以用大整数来做,也可以使用大整数的原理分块存储计算
  • 由题意输入只有一个数字,故不用考虑打表

代码(C)

    #include <stdio.h>    int a[20000]={0};                   //定义存储数组;反向存    int main(){        int n;        scanf("%d", &n);        int len=0,s,jin=0;              //s每位的计算结果,jin进位,len数据位数        a[0]=1;        for(int i=2;i<=n;i++){          //2开始进行阶乘            for(int j=0;j<=len;j++){                s=a[j]*i+jin;                a[j] = s%10;                jin = s/10;                if(j==len && jin!=0)                    len++;            }        }        for(int z=len;z>=0;z--)         //反向输出结果            printf("%d",a[z]);        printf("\n");        return 0;    }

运行结果

Result Accept Time 380MS Memory 316 Language C
原创粉丝点击