2020-05-29 阶乘计算

2020-05-29  本文已影响0人  JalorOo
#include<iostream>
#include <bitset>
#include<iomanip>
#include <algorithm>
#define PI 3.1415926535898
#define mod 10007
using namespace std;

int read(){//普通的快读,不解释
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9'){
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9'){
        x=x*10+c-'0';
        c=getchar();
    }
    return x*f;
}

int A[2605];
string ans;

void A_Mutiply(int n,bool last){
    //printf("n: %d\n",n);
    bool skip = false;
    for (int i = 0; i<2599; i++) {
        if (skip) {
            skip = false;
        }else{
            A[i]*=n;
        }
        if (A[i]>9) {
            A[i+1] *=n ;
            A[i+1] +=A[i]/10 ;
            skip = true;
            //printf("进位:A[%d] = %d\n",i+1,A[i+1]);
            A[i]%=10;
        }
        //printf("A[%d] = %d\n",i,A[i]);
        if (last) {
            ans+= to_string(A[i]);
            //cout<<ans<<endl;
        }
        //printf("end\n");
    }
}

int main(){
    A[0] = 1;
    int n = read();
    for (int i = 1; i<=n; i++) {
        if (i==n) {
            //printf("=====");
            A_Mutiply(i, true);
        } else {
            A_Mutiply(i,false);
        }
    }
    reverse(ans.begin(),ans.end());
    for (int i = 0; i<ans.length();) {
        if (ans[i]=='0') {
            ans.erase(i,1);
        } else {
            break;
        }
    }
    cout<<ans<<endl;
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读