1. 程式人生 > >階乘計算(高精度)

階乘計算(高精度)

OS 代碼 body 後乘 return () 需要 輸出格式 其中

問題描述   輸入一個正整數n,輸出n!的值。
  其中n!=1*2*3*…*n。 算法描述   n!可能很大,而計算機能表示的整數範圍有限,需要使用高精度計算的方法。使用一個數組A來表示一個大整數aA[0]表示a的個位,A[1]表示a的十位,依次類推。
  將a乘以一個整數k變為將數組A的每一個元素都乘以k,請註意處理相應的進位。
  首先將a設為1,然後乘2,乘3,當乘到n時,即得到了n!的值。 輸入格式   輸入包含一個正整數nn<=1000。 輸出格式   輸出n!的準確值。 樣例輸入 10 樣例輸出 3628800 代碼樣例:

#include <stdio.h>
#include <string.h>
int main()
{
int a[10000];
int i,j,n,t=0,k=0,g=0;//t表示當前位數
scanf("%d",&n);
memset(a,0,sizeof(a));
a[0]=1;
for(i=1;i<=n;i++){
for(j=0;j<=t;j++){
k=a[j]*i+k;
a[j]=k%10;
k=k/10;
if(k!=0||j<g){
t++;
}
}
g=t;//g用於記錄上一次的最高位
if(i+1<=n){
t=0;
k=0;
}
}
for(i=t;i>=0;i--){
printf("%d",a[i]);
}
printf("%\n");
return 0;
}

解釋:相比傳統的階乘計算,采用數組進行處理,模仿手算的原理。

如果需要求更高精度的階乘計算,可以隨意更改數組a的大小。

階乘計算(高精度)