杭電oj-1042-N!
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
題目的意思是讓你求輸入的數的階乘,題目雖然很簡單,但是由於資料太大,開個10005的陣列預處理每一個數組的預處理明顯不行,所以這道題用大數相乘依次求階乘
我的思想:開個足夠大的陣列,每一個數組存一個各位數,代表階乘的每一位數,我們知道15*20的值就等於10*20+20*5的值,所以我們可以給陣列為下標為0的賦值為5,下標為1的賦值為1,分別乘以20,然後取餘,進位。
程式碼如下:
#include <stdio.h>
#include <string.h>
int a[50005];
int k;
int main()
{
int t,i,j;
while(scanf("%d",&t)!=EOF)
{
memset(a,0,sizeof(a));
if(t==0||t==1)
printf("1\n");
else
{
k=1;
a[0]=1;
int jishu=0;
for(i=2;i<=t;i++)
{
for(j=0;j<k;j++)
{
a[j]=i*a[j]+jishu%10;
jishu=a[j]/10+jishu/10;
a[j]=a[j]%10;
}
while(jishu!=0)
{
a[j++]=jishu%10;
jishu/=10;
k++;
}
}
for(i=k-1;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
}
return 0;
}