大整数阶乘乘法

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
char a[100000],b[100000],c[100000];
int x[100000],y[100000],z[100000];

int Muti()
{
    memset(z,0,sizeof(z));
    memset(x,0,sizeof(x));
    memset(y,0,sizeof(y));
    int len1 = strlen(a);
    int len2 = strlen(b);
    int k =len1 + len2;
    for(int i=0;i<len1;i++) x[i] = a[len1-i-1] - '0';
    for(int i=0;i<len2;i++) y[i] = b[len2-i-1] - '0';
    for(int i=0;i<len1;i++)
    {
        for(int j=0;j<len2;j++)
        {
            z[i+j] += x[i] * y[j];
        }
    }
    for(int i=0;i<=k;i++)
    {
        if(z[i]>=10)
        {
            z[i+1] += z[i] / 10;
            z[i] = z[i] % 10;
        }
    }
    int s = k;
    while(z[s]==0) s--;
    if(s<0)
    {
        memset(a,0,sizeof(a));
    }
    else
    {
        int cont = 0;
        for(int j=s;j>=0;j--)
        {
            int u = z[j];
            a[cont++] = (char)(u+'0');
        }
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    memset(a,0,sizeof(a));
    sprintf(a,"%d",1);
    for(int i=2;i<=n;i++)
    {
        memset(b,0,sizeof(b));
        sprintf(b,"%d",i);
        Muti();
    }
    printf("%s
",a);
    return 0;

}
原文地址:https://www.cnblogs.com/Leozi/p/10835108.html