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;
}