6-10 阶乘计算升级版 (20 分)

#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 num3000={1};

int up=0;//记录当前进位值

int pos=0;//记录当前最高位所在的下标

for(int i=1;i<=N;i++)

{

for(int j=0;j<=pos;j++)

{

int tem=numj*i+up; //更新当前位置上的数

numj=tem%10;

up=tem/10;

}

while(up!=0)//位数要增长

{

num++pos=up%10;

up/=10;

}

// for(int d=pos;d>=0;d--)

// {

// printf("%d",numd);

// }

// printf("\n");

}

// printf("\n");

for(int i=pos;i>=0;i--)

{

printf("%d",numi);

}

}