Hello大家好,今天做了一道PTA的题,题目比较简单,但是有些细节还是需要注意的,就比如我,调试了很长时间才通过测试,可能使我太菜吧!(?),现在将我的代码和解题过程发出来,仅供初学者参考!

题目:

1.PNG

解题思路:
这道题并不难,就是按照数学的解题思路,将之用程序代码描述出来。
要解决这道题,你先需要知道最大公约数和最小公倍数的求法,懂得了这个,这个题基本上就算结束了。。。。。
接下来请看::

long long gcd(long long a,long long b)//最大公约数
{
return (a%b!=0?(gcd(b,a%b)):b);
}
long long lcm(long long a,long long b)//最小公倍数
{
long long t=gcd(a,b);
return (a*b/t);
}
这是求最大公约数和最小公倍数的基本方法,相当于一个模板,只需要记住即可,这个不会的可以自行度娘。

然后我们需要知道,想求两个分数的和,肯定第一步是进行通分,然后相加化简,上边没有用的事Long Long型,因为要考虑溢出。
将他们加起来化简之后,按格式输出即可,需要注意的是:正负由分子决定,分子正则正、负则负。

接下来请看完整代码:

    #include<stdio.h>
    //typedef,将Long Long起别名LL,方便后边写和阅读。
    //gcd函数为求两个数的最大公约数
    typedef long long LL;
    LL gcd(LL a,LL b){
    if(a % b == 0) return b;
    return gcd(b,a % b);
    }
    //主函数
    int main()
    {
    int N;//输入分数的个数
    scanf("%d",&N);
    LL na,nb,a,b,q;
    scanf("%lld/%lld",&na,&nb);
    //循坏前一个与后一个分数相加
    while(--N){
        scanf("%lld/%lld",&a,&b);
        //这部分为两个分数相加的过程,看不懂的可以在草稿纸上算一下哦!
        q = gcd(nb,b);
        nb = nb / q * b;
        na =na* b / q;
        na += nb / b * a;
        //化简分数
        if(na > 0) q = gcd(na,nb);
        else q = gcd(-na,nb);
        na /= q,nb /= q;
    }
    //按规定格式输出
    LL cut = na;
    if(na< 0) cut = -na;
    if(cut % nb == 0)
            printf("%lld\n",na / nb);
    else{
        cut = cut % nb;
        if(na < 0) cut = -cut;
        LL p = na / nb;
        q = gcd(cut,nb);
        cut /= q,nb /= q;
        if(p != 0 && cut != 0) 
            printf("%lld%lld/%lld\n",p,cut,nb);
        if(p == 0 && cut != 0) 
            printf("%lld/%lld\n",cut,nb);
    }
    return 0;
    }

好啦,这就是今天的这道题了,希望对你们有用哦!?


丶丸子
1 声望0 粉丝