求助(高精度阶乘)
  • 板块学术版
  • 楼主saam
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/20 21:03
  • 上次更新2024/8/21 07:47:02
查看原帖
求助(高精度阶乘)
1359067
saam楼主2024/8/20 21:03
//
#include "bits/stdc++.h"
using namespace std;
//
int n,c[5001],x[5001],y[5001];
string ans="1";
//
string to_str(int w){
	string s,b="";
	while(w>0){
		s+=(w%10)+'0';
		w/=10;
	}
	for(int i=s.size()-1;i>=0;i--)b+=s[i];
	return b;
}
//
string f(string a, string b) {
	memset(c,0,sizeof(c));
	memset(x,0,sizeof(x));
	memset(y,0,sizeof(y));
	int r;
	for(int i=0;i<a.size();i++)x[a.size()-i]=a[i]-'0';
	for(int i=0;i<b.size();i++)y[b.size()-i]=b[i]-'0';
	for(int i=1;i<=a.size();i++){
		r=0;
		for(int j=1;j<=b.size();j++){
			c[i+j-1]=x[i]*y[j]+r+c[i+j-1];
			r=c[i+j-1]/10;
			c[i+j-1]%=10;
		}
		c[i+b.size()]=r;
	}
	int cc=a.size()+b.size();
	while(c[cc]==0&&cc>1)cc--;
	string io="";
	for(int i=cc;i>=1;i--)io+=(char)c[i]+'0';
	return io;
}
//
signed main(){
	cin >> n;
	for(int i=2;i<=n;i++)ans=f(ans,to_str(i));
	cout << n << "!=" << ans;
	return 0;
}
2024/8/20 21:03
加载中...