1. 程式人生 > 其它 >高精度階乘(c語言)

高精度階乘(c語言)

技術標籤:自學空間c語言演算法

在刷題時偶然遇到了高精度階乘的問題,於是立即自學了一下,在此作簡要總結。

提出背景:普通的階乘演算法(不斷用i*(i+1)迴圈)對於較大數的階乘,由於運算結果位數過大,會造成溢位,使結果精度低。此時引出高精度計算階乘的方法。

實現思路:用陣列倒序儲存每一位的數,手動調整進位,再倒序輸出

程式程式碼:

#include <stdio.h>
#define LEN 100000
void factorial(int* p,int x);
int main(int argc,char* argv[])
{
	int num[LEN]={0};
	int x,i,
j; int* p=num; scanf("%d",&x); factorial(p,x); for(j=LEN-1;j>=0;j--) if(*(p+j)>0) break; for(i=j;i>=0;i--) printf("%d",*(p+i)); } void factorial(int* p,int x)//計算x的階乘,存入陣列num { int sum,i,j,c; *p=1; for(i=2;i<=x;i++) { c=0;//c表示進位 for(j=0;j<LEN;
j++) { sum=*(p+j)*i+c; *(p+j)=sum%10; c=sum/10; } } }