提交时间:2024-08-20 21:46:48

运行 ID: 173584

#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=1e9; struct node{ int f[maxn],len; node(){ memset(f,0,sizeof(f)); len=1; } node operator=(const string&p){ len=p.size(); for(int i=0;i<len;i++) f[len-i-1]=p[i]-'0'; return *this; } node operator=(int n){ if(n==0)return*this; int i=0; while(n){ f[i++]=n%10; n/=10; } len=i; return*this; } node operator*(const node&p){ node tmp; int y=0; tmp.len=len+p.len; for(int i=0;i<len;i++) for(int j=0;j<p.len;j++) tmp.f[i+j]+=f[i]*p.f[j]; for(int i=0;i<tmp.len;i++){ tmp.f[i+1]+=tmp.f[i]/10; tmp.f[i]%=10; } if(!tmp.f[tmp.len-1])tmp.len--; return tmp; } }; istream&operator>>(istream&in,node&p){ string s; in>>s; p=s; return in; } ostream&operator<<(ostream&out,const node&p){ for(int i=p.len-1;i>=0;i--) out<<p.f[i]; return out; } int main(){ int n; while(cin>>n){ node a,t; a=1; for(int i=1;i<=n;i++){ t=i; a=a*t; } cout<<a.len<<endl; cout<<a<<endl; } return 0; }