高精度階乘(c語言)
阿新 • • 發佈:2020-12-27
在刷題時偶然遇到了高精度階乘的問題,於是立即自學了一下,在此作簡要總結。
提出背景:普通的階乘演算法(不斷用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;
}
}
}