您的位置:首页 > 其它

hdu 1099

2014-12-18 16:05 281 查看
原题目地址
http://acm.hdu.edu.cn/showproblem.php?pid=1099
点击打开链接

简单地描述一下提议

输入 2

输出 2/1 + 2/2 = 6/2 = 3

输入 3

输出 3/1 + 3/2 +3/3 = 5 1/3

输入 5

输出 5/1 + 5/2 +5/3 +5/4 +5/5 = 11 5/12

其他的自己照着推一下就出来了

直接上代码了

GCC编译器

#include <stdio.h>
/**
*  求最大公约数
*/
long long gcd(long long a,long long b)
{
if(b==0) return a;
else return gcd(b,a%b);
}

int main()
{

int i,n,size1,size2;
long long number,n1,n2;
long long integer;//整数部分
long long fenzi;//分子
long long fenmu;//分母
long long a[23];//a
表示输入为n时,从1到n这些数的最小公倍数

a[1]=1;
for(i = 2;i<= 22 ; i++)
a[i]=i*a[i-1]/gcd(i,a[i-1]);//两个数的最小公倍数等于这两个数的乘机除以他们的最大公约数

while(scanf("%d",&n)!=EOF)
{
fenzi=0;
/**
*  fenzi = (最小公倍数 * n)/i
*/
for(i=1;i<=n;i++)
fenzi += a
/i;
fenzi *= n;

number = gcd(fenzi,a
); //分子分母的最大公约数
fenzi = fenzi/number; //约分后的分子
fenmu = a
/number; //约分后的分母
integer = fenzi/fenmu; //结果的整数部分
fenzi = fenzi-integer*fenmu; //最终结果的分子

if(fenzi==0)
{
printf("%lld\n",integer);
continue;
}

size1=size2=0;
n1=integer;
n2=fenmu;
//整数的位数
while(n1!=0)
{
size1++;
n1/=10;
}
//分母的位数
while(n2!=0)
{
size2++;
n2/=10;
}

//按题目要求的格式打印结果
for(i=0;i<=size1;i++)
printf(" ");
printf("%lld\n",fenzi);
printf("%lld ",integer);
for(i=0;i<size2;i++)
printf("-");
printf("\n");
for(i=0;i<=size1;i++)
printf(" ");
printf("%lld\n",fenmu);
}
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: