题目链接
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;
}注意
存在进位计算时,并不是高位先加上低位的进位再乘,而是先乘再加上进位。

京公网安备 11010502036488号