没什么好说的了,看代码吧:
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
int n,m;
ll gcd(ll a,ll b) {
return b == 0 ? a : gcd(b,a%b);
}
int gainLen(ll a) {
int cnt = 0;
while(a > 0) {
a /= 10; cnt++;
}
return cnt;
}
int main() {
while(~scanf("%d",&n)) {
ll u = 1 , v = 1;
for(int i=2;i<=n;i++) {
u *= i; u += v; v *= i;
ll c = gcd(u,v);
u /= c; v /= c;
}
u *= n;
ll c = gcd(u,v);
u /= c; v /= c;
if(u % v == 0) printf("%lld\n",u/v);
else {
ll a = u / v;
u -= a*v;
int len = gainLen(a);
int len2 = gainLen(v);
for(int i=0;i<=len;i++) printf(" ");
printf("%lld\n%lld ",u,a);
for(int i=0;i<len2;i++) printf("-");
printf("\n");
for(int i=0;i<=len;i++) printf(" ");
printf("%lld\n",v);
}
}
return 0;
}