题目链接
https://www.dotcpp.com/oj/problem1474.html
题目大意
十分明了
解题思路
高精度!
补充高精度代码,高精度的含义是大数计算。
没啥好说的就是记住理解代码
AC代码
//菜鸡代码,我的代码 #include<bits/stdc++.h> using namespace std; const int N=10005; int a[N]; char s[N]; int main(){ int n; int len=10000; cin>>n; a[1]=1; int c=0; int s; for(int i=2;i<=n;i++) for(int j=1;j<=len;j++){ a[j]=a[j]*i+c; c=a[j]/10; a[j]%=10; } while(a[len]==0){len--;} for(int i=len;i>=1;i--) cout<<a[i]; } //大佬代码 #include<bits/stdc++.h> using namespace std; vector<int> mul(vector<int> a,int m){ vector<int> c; int t=0; for(int i=0;i<a.size();i++){ t=a[i]*m+t; c.push_back(t%10); t/=10; } while(t){ c.push_back(t%10); t/=10; } return c; } int main(){ int n; vector<int> res; res.push_back(1); cin>>n; for(int i=2;i<=n;i++) res=mul(res,i); for(int i=res.size()-1;i>=0;i--) cout<<res[i]; cout<<endl; return 0; }
注意
存在进位计算时,并不是高位先加上低位的进位再乘,而是先乘再加上进位。