高精度,大数的阶乘

时间:2021-11-20 03:36:05

求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;
}