ACM内部函数--数学问题--大数阶乘

南阳oj地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=28


#include<iostream>
#include <stdio.h>
#include <stdlib.h>
#include<stack>
#include<string.h>
#include<math.h>
using namespace std;
/**
   语法:int result=factorial(int n);

   参数:n:n 的阶乘

   返回值:阶乘结果的位数

   注意:本程序直接输出n!的结果,需要返回结果请保留long a[]

   需要 math.h

*/
 int factorial(int n){
long a[10000];
int i,j,l,c,m=0,w;

a[0]=1;
for(i=1;i<=n;i++)
    {
    c=0;
    for(j=0;j<=m;j++)
        {
        a[j]=a[j]*i+c;
        c=a[j]/10000; //这里除以10000,代表一位可以存五位数
        a[j]=a[j]%10000;
    }
    if(c>0) {m++;a[m]=c;}
}

    w=m*4+log10(a[m])+1;
   printf("\n%ld",a[m]);
   for(i=m-1;i>=0;i--) printf("%4.4ld",a[i]);
   printf("\n");
   return w;
}


int main(){
    int n;
    scanf("%d",&n);
    factorial(n);
    return 0;
}


你可能感兴趣的:(ACM内部函数--数学问题--大数阶乘)