hdu 1099

来源:互联网 发布:评标专家库软件 编辑:程序博客网 时间:2024/06/03 19:41

原题目地址

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]表示输入为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[n]/i;       fenzi *= n;                number = gcd(fenzi,a[n]); //分子分母的最大公约数        fenzi = fenzi/number; //约分后的分子        fenmu = a[n]/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;}


0 0
原创粉丝点击