5 条题解
-
0
首先,这题的数据非常的小
我写的int128跑这题使用了4ms,但是好在AC了,所以用不着高精度捏。
所以使用高精度的差不多够了哈。这题考察的也根本不是高精度,考场出高精度基本要被骂毒瘤出题人的。
以下正常代码(部分):
#define i128 __int128 void solve() { i128 n,ans=1; read(n); for(i128 i = 2 ; i<=n ; i++){ ans*=i; } print(n); cout<<"!=" ; print(ans); }
long long 爆掉了,所以不建议,unsigned long long应该也不行。建议学习有关__int128的知识,和写一个快读快写差不了多少。
还有虽然有些人不知道int128,但至少把高精写在主函数外面啊喂!
递归做法:
i128 genshin(i128 p){ if(p==1)return 1; return p*genshin(p-1); } void solve() { i128 n,ans=1; read(n); ans=genshin(n); print(n); cout<<"!=" ; print(ans); }
-
-4
都给我用C++😕
朴实无华👀️
#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!=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; } } cout<<o<<"!="; for(int i=lc; i>=1; i--){ cout<<a[i]; } } return 0; }
- 1
信息
- ID
- 316
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 446
- 已通过
- 214
- 上传者