大數階乘

1.防止溢出的一種方式,有些數字超出int範圍,這時候用int就會溢出。這時候要用到大數的思想。
例子:

#include <stdio.h>

int main()
{
    int n;//階乘大小
    printf("請輸入n的大小:");
    scanf("%d",&n);
    int a[40001];//確保保存最終運算結果的數組足夠大
    int carry;//進位
    int digit=1;//位數
    a[0]=1;//將結果先初始化爲1
    int temp;//階乘的任一元素與臨時結果的某位的乘積結果
    int i,j;
    for(i=2;i<=n;++i){//開始階乘,階乘元素從2開始一次登場
        for(j=1,carry=0;j<=digit;++j){//按最基本的乘法運算思想來考慮,將臨時結果每一位與階乘元素相乘
            temp=a[j-1]*i+carry;//相應階乘中的一項與當前所得臨時結果的某位相乘(加上進位)
            a[j-1]=temp%10;//更新臨時結果的位上信息
            carry=temp/10;//看看是否有進位
        }
        while(carry){//如果有進位
            a[++digit-1]=carry%10;//新加一位,添加信息。位數增1
            carry/=10;//看看還能不能進位
        }
    }
    printf("結果是:\n%d!=",n);//顯示結果
    for(i=digit;i>=1;--i)
        printf("%d",a[i-1]);
    return 0;
}

有什麼問題加我QQ:839505138.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章