#include<iostream>
#include<cstdio>
#define rep(i,j,k) for(register int i(j);i<=k;++i)
#define drp(i,j,k) for(register int i(j);i>=k;--i)
#define repg(x) for(register int i(G.head[x]);i;i=G.next[i])
#define bug cout<<"~~~~~~~~~~~~~"<<'\n';
#define bugout(x) cout<<x<<'\n';
using std::cin;
using std::cout;
typedef long long lxl;
template<typename T>
inline T max( T a, T b) {
return a > b ? a : b;
}
template<typename T>
inline T min( T a, T b) {
return a < b ? a : b;
}
inline char gt() {
static char buf[1 << 21], *p1 = buf, *p2 = buf;
return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++;
}
template <typename T>
inline void read(T &x) {
register char ch = gt();
x = 0;
int w(0);
while(!(ch >= '0' && ch <= '9'))w |= ch == '-', ch = gt();
while(ch >= '0' && ch <= '9')x = x * 10 + (ch & 15), ch = gt();
w ? x = ~(x - 1) : x;
}
template <typename T>
inline void out(T x, char cc) {
if(x < 0) x = -x, putchar('-');
char ch[20];
int num(0);
while(x || !num) ch[++num] = x % 10 + '0', x /= 10;
while(num) putchar(ch[num--]);
putchar(cc);
}
inline lxl gcd(lxl a, lxl b) {
return b ? gcd(b, a % b) : a;
}
int n;
lxl ansa, ansb;
inline void plus(int x) {
lxl t = x * ansb / gcd(ansb, x); //¡Á?D?1?¡À?¨ºy
lxl f = n;
ansa = ansa * (t / ansb);
f = f * (t / x);//¨ª¡§¡¤?
ansa += f; // ans/t
lxl d = gcd(ansa, t);
ansa /= d;
t /= d; //??¡¤?
ansb = t;
}
inline int num(lxl x) {
int ans(0);
while(x) {
x /= 10;
ans++;
}
return ans;
}
int main() {
freopen("233.txt", "w", stdout);
while(cin >> n) {
ansa = n;
ansb = 1;
rep(i, 2, n ) {
plus(i);
}
if(ansb == 1) {
out(ansa, '\n');
continue;
}
lxl t = ansa / ansb;
ansa -= t * ansb;
int lent = num(t);
int lenb = num(ansb);
rep(i, 1, lent + 2) {
putchar(' ');
}
out(ansa, '\n');
putchar(' ');
out(t, ' ');
rep(i, 1, lenb) {
putchar('-');
}
putchar('\n');
rep(i, 1, lent + 2) {
putchar(' ');
}
out(ansb, '\n');
}
return 0;
}
另外一道双倍经验过了。这题输出格式也改了。。能过样例啊,肉眼对比。。但是wa#1