测试点
#include<bits/stdc++.h>
using namespace std;
#define XL_size 100000001
#define large_size 10000001
#define big_size 400001
#define _size_ 200001
#define mid_size 100001
#define small_size 10001
#define mini_size 5001
#define micro_size 2001
string mul(string a,int b)
{
int arr[_size_],answer[_size_];string ansstr="";
memset(arr,0,sizeof(arr));memset(arr,0,sizeof(arr));
int lena,lenc=0,x=0;
lena=a.size();
for(int i=0;i<lena;i++) arr[lena-i]=a[i]-'0';
while(lenc<=lena)
{
answer[lenc]=(arr[lenc]*b+x)%10;
x=(arr[lenc]*b+x)/10;
lenc++;
}
while(x!=0)
{
answer[lenc]=x%10;
x/=10;
lenc++;
}
while(answer[lenc]==0&&lenc>1) lenc--;
for(;lenc>=1;lenc--) ansstr+=answer[lenc]+'0';
return ansstr;
}
string Add(string str1,string str2)
{
string ans;
int arr1[mid_size],arr2[mid_size],arr_answer[mid_size];
memset(arr1,0,sizeof(arr1));memset(arr2,0,sizeof(arr2));memset(arr_answer,0,sizeof(arr_answer));
int size1=str1.size(),size2=str2.size(),size3=1;
for(int i=1;i<=size1;i++) arr1[i]=(str1[size1-i]-'0');
for(int i=1;i<=size2;i++) arr2[i]=(str2[size2-i]-'0');
int x=0;
while(size3<=size1||size3<=size2)
{
arr_answer[size3]=arr1[size3]+arr2[size3]+x;
x=arr_answer[size3]/10;
arr_answer[size3]%=10;
size3++;
}
if(x!=0) arr_answer[size3]=x;
while(arr_answer[size3]==0&&size3>1) size3--;
for(int i=size3;i>=1;i--) ans+=(arr_answer[i]+'0');
return ans;
}
int main()
{ios::sync_with_stdio(0);cin.tie(0);
int a;string sum;
cin>>a;
for(int i=1;i<=a;i++)
{
string temp="1";
for(int j=1;j<=i;j++) temp=mul(temp,j);
sum=Add(sum,temp);
}
cout<<sum;
}
第一个测试点:
输入:6
输出:873