70分求助
查看原帖
70分求助
522483
VictoriaEVA楼主2022/12/29 11:42

rt

WA了第2,8,9,10点

知道是数据溢出,但不知道怎么约分

#include <bits/stdc++.h>
using namespace std;
#define ll unsigned long long
ll n,ans,x1,x2=1;
ll f(ll a)
{
	ll d=a,r=0;
	for(; d>0; r++)
		d/=10;
	return r;
}
void s(ll a)
{
	ll gcd=__gcd(n,a),p=n/gcd,q=a/gcd,gcd1=__gcd(q,x2),d=q/gcd1;
	x2=d*x2;
	x1+=p*d;
	return;
}
int main()
{
	scanf("%d",&n);
//	for(ll i=1;i<=n;++i)
//	{
//		if(n%i==0)
//			ans+=n/i;
//		else
//			s(i);
//	}
	for(ll i=2; i<=n; ++i)
		x2*=i;
	for(ll i=1; i<=n; ++i)
		x1+=n*(x2/i);
	ans+=x1/x2;
	x1%=x2;
	if(x1==0)
		printf("%d",ans);
	else
	{
		ll gcd=__gcd(x1,x2);
		x1/=gcd;
		x2/=gcd;
		int f1=f(ans)-1,f2=f(x2);
		cout<<setw(f1+f(x1)+1)<<x1<<endl;
		cout<<ans;
		for(ll i=1; i<=f2; ++i)
			printf("-");
		cout<<endl<<setw(f1+f2+1)<<x2;
	}
	return 0;
}

2022/12/29 11:42
加载中...