您的位置:首页 > 其它

PAT_B_结构-02. 有理数加法(15)

2014-08-17 18:10 387 查看
输入格式:

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

输出格式:

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

输入样例1:
1/3 1/6
输出样例1:
1/2
输入样例2:
4/3 2/3
输出样例2:
2
主要考量了结构体的基本使用,主要编程思想先输入,然后求分母公约数,最后化简输出。除此之外,还可以直接相乘,然后化简输出。提供一种AC的Sources Codes

#include <iostream>

using namespace std;

struct Data
{
    int fengzi;
    int fengmu;
};

int gongyueshu(int a,int b)
{
    int i;
    int result=1;
    
    for (i=1; i<=a&&i<=b; i++) {
        
        if (a%i==0&&b%i==0) {
            
            result*=i;
            a/=i;
            b/=i;
            i=1;
            
        }
    }
    
    result=result*a*b;
    
    return result;
}

int main(int argc, const char * argv[])
{

    Data a,b;
    int m,n;
    
    scanf("%d/%d %d/%d",&a.fengzi,&a.fengmu,&b.fengzi,&b.fengmu);
    
    m=gongyueshu(a.fengmu,b.fengmu);
    
    n=a.fengzi*m/a.fengmu+b.fengzi*m/b.fengmu;
    
    for (int i=1; i<=m&&i<=n; i++) {
        
        if (m%i==0&&n%i==0) {
            m/=i;
            n/=i;
            i=1;
        }
        
    }
    
    if (m==1) {
        printf("%d\n",n);
    }
    else
    {
        printf("%d/%d\n",n,m);
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: