N! (HDU - 1042 )(大数+万进制)
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
Input
One N in one line, process to the end of file.
Output
For each N, output N! in one line.
Sample Input
1
2
3
Sample Output
1
2
6
思路:这道题是求10000以内的阶乘,很明显是个大数,所以我们在这里用到万进制,万进制顾名思义就是逢10000进1,用万进制算的话,求结果比较方便。
AC代码:
#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;
int main()
{
int n;
while(~scanf("%d",&n))
{
int i,j,sum,digits=1;//10000进制的位数
int a[10001]={1};
for(i=2; i<=n; i++)
{
sum=0;//进位
for(j=0; j<digits; j++)
{
a[j]=a[j]*i+sum;
sum=a[j]/10000;
a[j]%=10000;
}
if(sum>0)//最高位的进位
a[digits++]=sum;
}
//输出高位原样输出,低位的高位补0,一位一补
printf("%d",a[digits-1]);
for(i=digits-2; i>=0; i--)
printf("%04d", a[i]);
printf("\n");
}
return 0;
}