题意没懂, 看了discuss,有人说的,才懂了。。。
#include <stdio.h>
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
__int64 gcd(__int64 a, __int64 b)
{
if(b == 0) return a;
return gcd(b, a % b);
}
__int64 getlen(__int64 x)
{
__int64 cnt = 0;
while(x)
{
cnt++;
x /= 10;
}
return cnt;
}
int main()
{
__int64 n;
while(scanf("%I64d", &n) != EOF)
{
__int64 fm = 1, fz = n, temp;
for(__int64 i = 2; i <= n; i++)
{
fm *= i;
fz = fz * i + fm * n / i;
temp = gcd(fz, fm);
fz /= temp;
fm /= temp;
}
__int64 a = fz / fm;
if(fz % fm == 0)
{
printf("%I64d\n", a);
continue;
}
fz = fz - fm * a;
__int64 len_fm = getlen(fm);
__int64 len_fz = getlen(fz);
__int64 len_a = getlen(a);
__int64 maxx = max(len_fm, len_fz);
for(__int64 i = 0; i < len_a + 1; i++)
putchar(' ');
printf("%I64d\n", fz);
printf("%I64d ", a);
for(__int64 i = 0; i < maxx; i++)
putchar('-');
puts("");
for(__int64 i = 0; i < len_a + 1; i++)
putchar(' ');
printf("%I64d\n", fm);
}
return 0;
}