高精度,大数的阶乘

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高精度,大数的阶乘相关的知识,希望对你有一定的参考价值。

求1000!

#include <bits/stdc++.h>
using namespace std;
#define Maxn 1000
int A[Maxn];
int main(){
    int i,j,n;
    scanf("%d",&n);
    memset(A,0,sizeof(A));
    A[0] = 1;//第一位要设置为1,否则结果就全是0了
    for(int i = 2; i <= n; i++){
        int c = 0;
        for(j = 0; j < Maxn; j++){//模拟计算
            int s = A[j]*i + c;
            A[j] = s % 10;
            printf("%d\n",s%10);
            c = s/10;
        }
    }
    //是从后往前计算的,例如115,数组里存的就是511,然后去掉前导0,倒序输出即可
    for(j = Maxn -1; j >= 0; j--){//去掉前导0
        if( A[j] ){
            break;
        }
    }
    for(i = j; i >= 0; i--){
        printf("%d",A[i]);
    }
    cout << endl;
    return 0;
}

  

以上是关于高精度,大数的阶乘的主要内容,如果未能解决你的问题,请参考以下文章

大数处理--阶乘计算

高精度问题,C语言,求二的n次方

大数阶乘,C语言,数组

大数的阶乘

NYOJ题目28大数阶乘

快速精确 bigint 阶乘