描述
求10000以内n的阶乘。
输入
只有一行输入,整数n(0<=n<=10000)。
输出
一行,即n!的值。
#include<stdio.h>
#include<string.h>
#define N 35661
void ni(int arr[],int n)
{
int flag=1;
for(int i=n-1;i>=0;i--)
{
if(flag&&arr[i]!=0)
{
flag=0;
}
if(!flag)
{
printf("%d",arr[i]);
}
}
if(flag)
{
printf("0");
}
}
//逆序打印,并且不打印前面的0(数组设置较大,会有不必要的0)
void jie(int a[],int n)
{
int temp1=0,temp;
for(int i=2;i<=n;i++)
{
for(int j=0;j<N;j++)
{
a[j]*=i;
temp=a[j]/10; //利用临时变量存储这一次的十位
a[j]=a[j]%10; //只保留个位
a[j]+=temp1; //上一次存储的十位用来进位
temp+=a[j]/10; //应对出现进位后又满十的情况
a[j]=a[j]%10;
temp1=temp; //全部执行完后,存储这一次的十位,防止对本次造成影响
}
}
ni(a,N);
}
int main()
{
int a[N]={1};
for(int i=1;i<N;i++)
{
a[i]=0;
}
int n;
scanf("%d",&n);
jie(a,n);
}