您的位置:首页 > 其它

hdu 1099 Lottery

2012-01-10 15:18 141 查看
//求 n(1+1/2+1/3+....1/n)------m+a/b

犯了好几个错误 检查了 两个小时 ,咕~~(╯﹏╰) 很水的题 ,老犯逻辑错误 哎 要命

//原题链接http://acm.hdu.edu.cn/showproblem.php?pid=1099



#include<iostream>

#include<cstdio>

using namespace std;

typedef __int64 int64;

int64 gcd(int64 a ,int64 b)

{

return b==0?a:gcd(b,a%b);

}

int main()

{

int64 n,i,j,m;

int64 a,b,temp;

while(scanf("%I64d",&n)!=EOF)

{

m=1,a=1,b=2;

if(1==n)

printf("1\n");

else if(2==n)

printf("3\n");

else if(n==3)

printf(" 1\n5 -\n 2\n");

else if(n==4)

printf(" 1\n8 -\n 3\n");

else

{

for(i=3;i<=n;i++)

{

temp=b/gcd(b,i)*i;//b,i 的最小公倍数temp

a=temp/b*a+temp/i;

b=temp;

/*if(gcd(a,b)!=1)////

{

a=a/gcd(a,b);

b=b/gcd(a,b);害死我了

}*/

if(a>b)

{

m+=a/b;

a=a%b;

}

}

m=n*m+n*a/b;//不是n*(ab/)

a=n*a%b;

/* if(gcd(a,b)!=1)

{

a=a/gcd(a,b);

b=b/gcd(a,b);//a的值变了

}*/

temp=gcd(a,b);

if(temp!=1)

{

a=a/temp;

b=b/temp;

}

//
printf("a=%d** b=%d\n",a,b);

for(temp=b,j=0;temp!=0;)

{

temp=temp/10;

j++;

}

printf(" %I64d\n%I64d ",a,m);

for(i=0;i<j;i++)

printf("-");

printf("\n %I64d\n",b);

}

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: