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!的值,涉及到大數(shù)運算:加法和乘法。
解決思路為模擬手算乘法的過程,用數(shù)組存儲并運算得到結(jié)果。ProjectEuler中有一道類似的題目:題目13:找出100個50位數(shù)之和的前十位數(shù)字。
階乘代碼如下:
void Print_Factorial ( const int N )
{
if(N<0)
{
printf("Invalid input");
return ;
}
int num[3000]={1};
int up=0;//記錄當(dāng)前進(jìn)位值
int pos=0;//記錄當(dāng)前最高位所在的下標(biāo)
for(int i=1;i<=N;i++)
{
for(int j=0;j<=pos;j++)
{
int tem=num[j]*i+up; //更新當(dāng)前位置上的數(shù)
num[j]=tem%10;
up=tem/10;
}
while(up!=0)//位數(shù)要增長
{
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]);
}
}

浙公網(wǎng)安備 33010602011771號