#include <stdio.h>
void Print_Factorial ( const int N );
int main()
{
int N;
scanf("%d", &N);
Print_Factorial(N);
return 0;
}
/* 你的代码将被嵌在这里 */
打印N!的值,涉及到大数运算:加法和乘法。
解决思路为模拟手算乘法的过程,用数组存储并运算得到结果。ProjectEuler中有一道类似的题目:题目13:找出100个50位数之和的前十位数字。
阶乘代码如下:
void Print_Factorial ( const int N )
{
if(N<0)
{
printf("Invalid input");
return ;
}
int num[3000]={1};
int up=0;//记录当前进位值
int pos=0;//记录当前最高位所在的下标
for(int i=1;i<=N;i++)
{
for(int j=0;j<=pos;j++)
{
int tem=num[j]*i+up; //更新当前位置上的数
num[j]=tem%10;
up=tem/10;
}
while(up!=0)//位数要增长
{
num[++pos]=up%10;
up/=10;
}
// for(int d=pos;d>=0;d--)
// {
// printf("%d",num[d]);
// }
// printf("\n");
}
// printf("\n");
for(int i=pos;i>=0;i--)
{
printf("%d",num[i]);
}
}