美文网首页
(改)~-2 有理数加法

(改)~-2 有理数加法

作者: laochonger | 来源:发表于2018-03-19 22:35 被阅读0次

7-2 有理数加法(15 分)
本题要求编写程序,计算两个有理数的和。

输入格式:
输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。

输出格式:
在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。

输入样例1:
1/3 1/6
输出样例1:
1/2
输入样例2:
4/3 2/3
输出样例2:
2


我是这么写的。。。
#include<stdio.h>

int gys(int a, int b){
    int t,c;
    if(a < b){
        t = b;
        b = a;
        a = t;
    }
    while(a != b){
            a = a - b;
            if(a < b){
            t = b;
            b = a;
            a = t;
        }
    }
    return a;
}
int gcd(int a, int b){
    return a*b/gys(a,b);
}
int main(){
    int a1,b1, a2, b2;
    char q,w;
    while(scanf("%d %c %d %d %c %d" , &a1,&q, &b1, &a2 ,&w, &b2) == 6){
        int s = gys(b1, b2);
        int d = gcd(b1, b2);
        //b1 = d;
        //b2 = d;
        a1 = a1 * (d / b1);
        a2 = a2 * (d / b2);
        int sum = a1 + a2;
        int a = gys(sum, d);
        sum = sum/a;
        d = d/a;
        if(d == 1){
            printf("%d\n", sum);
        }
        else
            printf("%d/%d\n", sum, d);
    }
    return 0;
}

然而大神是这么写的

#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <string>
#include <map>
#include <set>

using namespace std;
#define For(i,l,r) for(int (i)=(int)(l);(i)<(int)(r);++(i))
#define FOR(i,l,r) for(int (i)=(int)(l);(i)<=(int)(r);++(i))
#define rof(i,l,r) for(int (i)=(int)(l);(i)>=(int)(r);--(i))
typedef pair<int,int> pii;
typedef long long ll;
typedef unsigned long long llu;
typedef unsigned int ui;

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

int main(){
 //   freopen("in.txt","r",stdin);
    ll a,b,c,d;
    scanf("%lld/%lld %lld/%lld",&a,&b,&c,&d);
    a=a*d+b*c;
    b*=d;
    ll g=gcd(a,b);
    printf("%lld",a/g);
    if(b/g!=1)printf("/%lld",b/g);
    puts("");

    return 0;
}

1:求公约数的算法我用了辗转相减(因为思考量最少。。。),所以需要判断a,b的大小,然而如上的辗转相除(递归写法)就不需要,因为会自动调换过来
2:我用了求公约数再求公倍数,但是这是人算的时候比较方便,然而对于程序来说,直接将分母相乘要方便。
3:题中对于数的大小没有规定,但是学长们为了保险都用了long long
4:对于头文件以及一些简便的写法先写出来,这点值得借鉴

相关文章

网友评论

      本文标题:(改)~-2 有理数加法

      本文链接:https://www.haomeiwen.com/subject/odkwfftx.html