3 solutions
-
2
如果再写一个判断进位的函数会TLE,所以可以用变量来记录进位,省了一个循环👍
#include<bits/stdc++.h> using namespace std; int arr[1100000]={1}; int main(){ int n,len=1,jw=0; cin>>n; for(int i=2;i<=n;i++){ for(int j=0;j<len;j++){ arr[j]=arr[j]*i+jw;//每位乘并加上上一个数的进位 jw=0;//清0 if(arr[j]>=10){ jw=arr[j]/10;//计算进位,在下一位加上 arr[j]%=10; if(j+1==len) len++; } } } int flag=0; for(int i=len-1;i>=0;i--){ if(arr[i]!=0 || flag==1) flag=1,cout<<arr[i]; } return 0; }
-
1
`
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int ans[N],len=1; void mul(int x) { for(int i=0;i<len;i++)ans[i]*=x; for(int i=0;i<len;i++) { ans[i+1]+=ans[i]/10000; ans[i]%=10000; } while(ans[len]!=0) { ans[len+1]=ans[len]/10000; ans[len]%=10000; len++; } } int main() { int n; cin>>n; ans[0]=1; for(int i=2;i<=n;i++)mul(i); len--; cout<<ans[len]; for(int i=len-1;i>=0;i--)printf("%04d",ans[i]); return 0; }
-
0
#include<bits/stdc++.h> using namespace std; int ans[1000010]={1},sum=1; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ for(int j=0;j<sum;j++)ans[j]*=i; for(int j=0;j<sum;j++){ if(ans[j]>9){ if(j+1>=sum)sum++; ans[j+1]+=ans[j]/10; } ans[j]%=10; } } bool f=false; for(int i=sum-1;i>-1;i--)if(ans[i]!=0||f)f=true,cout<<ans[i]; return 0; }
- 1
Information
- ID
- 658
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 7
- Tags
- # Submissions
- 121
- Accepted
- 27
- Uploaded By