NYOJ 28 大数阶乘

链接: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
posted @ 2017-06-23 21:52  千里m孤坟  阅读(114)  评论(0)    收藏  举报