5 条题解
-
1
朴实无华
#include<bits/stdc++.h> #include<string> using namespace std; int a[10000]; int b[10000]; int c[10000]; int main() { int o; cin >>o; int la,lb,lc; if(o==1){cout<<"1";} else{ for(int i=2; i<=o; i++){ if(i==2){ la=1; a[1]=1; } else{ la=lc; } lb=0; int k=i; for(int j=1; j>0; j++){ lb++; b[j]=k%10; k=k/10; if(k<10 && k!=0){ b[j+1]=k; lb++; break; } if(k==0){break;} } lc=lb+la; for(int j=1; j<=la; j++){ for(int t=1; t<=lb; t++){ c[t+j-1]=a[j]*b[t]+c[t+j-1]; c[t+j]=c[t+j]+c[t+j-1]/10; c[t+j-1]=c[t+j-1]%10; } } if(c[lc]==0){lc--;} for(int j=1; j<=lc; j++){ a[j]=c[j]; c[j]=0; } } for(int i=lc; i>=1; i--){ cout<<a[i]; } } return 0; }
-
0
我是短码大师,我非常喜欢压行
void solve(){cin>>n;a[0]=1;F(i,2,n){p=0;F(j,0,lxb){a[j]=a[j]*i+p;p=a[j]/10;a[j]%=10;}}int f=1;for(int i=lxb;i>=0;i--){if(f and!a[i])continue;f=0;cout<<a[i];}}
不皮了,高精乘其实要实现没必要那么麻烦,模拟正常乘法就好了。
#define F(a,b,c) for(int a=b ; a<=c ;a++) void solve() { cin>>n; a[0]=1; F(i,2,n){ p = 0; F(j,0,lxb){ a[j] = a[j]\*i+p; p = a[j]/10; a[j] %= 10; } } int f=1; for(int i=lxb ; i>=0 ; i--){ if (f and !a[i]) continue; f = 0; cout<<a[i]; } }
-
0
#include #include #include #include using namespace std; const int N=1e+5; long long ans[N]={0}; int main() { int n; cin>>n; ans[1]=1; long long cnt=1; for(int i=1;i<=n;i++) { for(int j=1; j<=cnt; j++) { ans[j]*=i;
}
for(int k=1; k<=cnt;k++) { ans[k+1]+=ans[k]/10; ans[k]%=10; if(ans[cnt+1]>0){cnt++;} }
} for(long long i=cnt;i>=1;i--) { cout<<ans[i]; } return 0;
}
-
0
#include
int a[50000]={0}; using namespace std;
int main() { int n,wei=0; cin >>n; a[0]=1; for(int i=1;i<=n;i++){ for(int j=0;j<=wei;j++){ a[j]*=i; } for(int k=0;k<=wei;k++){ a[k+1]+=a[k]/10; a[k]%=10; if(wei==k&&a[k+1]!=0){ wei++; } } } for(int i=wei;i>=0;i--){ cout <<a[i]; } }
-
0
#include<cstring> #include<iostream> #define maxn 3000 int f[maxn]; using namespace std; int main() { int i,j,n; cin>>n; memset(f,0,sizeof(f));//将其中内存置于0 f[0]=1;//初始置于1 for(i=2;i<=n;i++) { int jinwei=0;//定义进位初始为0 for(j=0;j<maxn;j++) { int s=f[j]*i+jinwei;//乘法结果为乘完加之前的进位 f[j]=s%10; jinwei=s/10;//获得进位数 } } /*下面这部分为了获取有多少位是有用的*/ for(j=maxn-1;j>=0;j--) if(f[j]!=0) break; for(i=j;i>=0;i--) { cout<<f[i]; } }
- 1
信息
- ID
- 281
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 74
- 已通过
- 28
- 上传者