51Nod_1057 N的阶乘
http://www.51nod.com/Challenge/Problem.html#!#problemId=1057
题目
输入N求N的阶乘的准确值。
输入
输入N(1 <= N <= 10000)
输出
输出N的阶乘
样例输入
5
样例输出
120
分析
大数问题,C C++使用数组,Java使用大数类
C语言程序
#include<stdio.h>
void factorial(int n)
{
int a[10000+1]={1};
int digits=1/*10000进制的位数*/,carry,i,j;
for(i=2;i<=n;i++){
carry=0; //进位
for(j=0;j<digits;j++){
a[j]=a[j]*i+carry;
carry=a[j]/10000;
a[j]%=10000;
}
if(carry>0) //最高位的进位
a[digits++]=carry;
}
//输出 :高位原样输出,低位的高位补0
printf("%d",a[digits-1]);
for(i=digits-2;i>=0;i--)
printf("%04d",a[i]);
printf("\n");
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
factorial(n);
return 0;
}