Cartier @ 2022-12-29 20:47:27
#include<bits/stdc++.h>
using namespace std;
int main(){
int n=0;
cin>>n;
int A[100]={0};
int B[100]={0};
A[0]=1;
B[0]=1;
if(n==1){
cout<<"1"<<endl;
return 0;
}
else{
for(int i=2;i<=n;i++){
for(int j=0;j<100;j++){
A[j]*=i;
}
for(int k=0;k<100;k++){
if(A[k]>=10){
A[k+1]=A[k+1]+A[k]/10;
A[k]%=10;
}
B[k]=B[k]+A[k];
if(B[k]>=10){
B[k+1]+=B[k+1]+1;
B[k]=B[k]-10;
}
}
}
}
int p=99;
while(B[p]==0){
p--;
}
while(p>=0){
cout<<B[p];
p--;
}
return 0;
}
by Cartier @ 2022-12-29 20:48:00
我试了几个数好像可以啊
by ZQIN_P @ 2022-12-29 21:00:46
@Cartier 您把50扔进去试下
by xiaoqian02 @ 2022-12-29 21:06:15
for(int i=2;i<=n;i++){
for(int j=0;j<100;j++){
A[j]*=i;
}
请考虑一下 a[0] 会不会炸的问题。所以你需要一边乘一边进位,否则高精也就没有意义了。