大数阶乘---处理大数范例

    xiaoxiao2021-03-25  99

    1019: 大数阶乘

    时间限制: 3000 Sec   内存限制: 65535 MB 提交: 43   解决: 10 [ 提交][ 状态][ 讨论版]

    题目描述

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

    输入

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

    输出

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

    样例输入

    50

    样例输出

    30414093201713378043612608166064768844377641568960512000000000000

    提示

    来源

    #include <stdio.h> #include <string.h> #include <stdlib.h> int a[1000000];//大数组函数外定义百万级 int main(int argc, char *argv[]) { //模拟手算 int n; int i,sum,j,len; while(scanf("%d",&n)!=EOF){ memset(a, 0, sizeof(a)); if(!n) {printf("1\n");continue;} a[0] = 1; for(i=1,sum=1,len=1;i<=n;i++){ for(j=0;j<len;j++)//模拟手算进位机制 按位乘 a[j]*=i; for(j=0;j<len;j++){ if(a[j]<10) continue; //最高位不大于10则不需要进位处理 int pos=j; //记录当前最高位 while (pos<len) { if(a[len-1]>9) len++; a[pos+1]+=a[pos]/10; a[pos]%=10; pos++; //进位处理 } } } for(j=len-1;j>=0;j--) printf("%d",a[j]); printf("\n"); } //system("PAUSE"); return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-24351.html

    最新回复(0)