hdu1099

#include<iostream>
using namespace std;

__int64 gcd(__int64 a,__int64 b)
{
return b?gcd(b,a%b):a;
}

__int64 lcm(__int64 a,__int64 b)
{
return a/gcd(a,b)*b;
}

int numlen(__int64 n)
{
int len=0;

while(n)
{
n/=10;
len++;
}
return len;
}

int main()
{
__int64 s,m,g,d;
int l1,l2,i,n;

while(scanf("%I64d",&n)==1)
{
m=1; //分母
s=0; //分子
for(i=1;i<=n;i++)
m=lcm(m,i);
for(i=1;i<=n;i++)
s+=m/i;
s*=n;
g=gcd(m,s); //求最大公约数
s/=g;
m/=g;
d=s/m; //整数部分
s%=m;
if(s==0)
{
printf("%d\n",d);
continue;
}
l1=numlen(d);
l2=numlen(m);
for(i=0;i<=l1;i++)
putchar(' ');
printf("%I64d\n",s);
printf("%I64d ",d);
for(i=1;i<=l2;i++)
putchar('-');
putchar('\n');
for(i=0;i<=l1;i++)
putchar(' ');
printf("%I64d\n",m);
}
return 0;
}

posted @ 2017-01-25 00:14  王坤1993  阅读(144)  评论(0编辑  收藏  举报