码迷,mamicode.com
首页 > 其他好文 > 详细

分数求和

时间:2017-10-14 16:44:15      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:公约数   最简   整数   iostream   gcd   names   nbsp   bsp   mes   

描述

输入n个分数并对他们求和,并用最简形式表示。所谓最简形式是指:分子分母的最大公约数为1;若最终结果的分母为1,则直接用整数表示。

如:5/6、10/3均是最简形式,而3/6需要化简为1/2, 3/1需要化简为3。

分子和分母均不为0,也不为负数。

输入第一行是一个整数n,表示分数个数,1 <= n <= 10;
接下来n行,每行一个分数,用"p/q"的形式表示,不含空格,p,q均不超过10。输出输出只有一行,即最终结果的最简形式。若为分数,用"p/q"的形式表示。样例输入

2
1/2
1/3

样例输出

5/6
#include <iostream>
using namespace std;

int main() {
    int t;
    cin >> t;
    int sumn = 0, sumd = 1; // 储存结果,sumn/sumd
    while (t--) {
        int num, deno;
        char slash; //专门用来吃掉/的
        cin >> num >> slash >> deno;
        // 先相加 a/b + c/d = (a*d+c*b)/(b*d)
        sumn =  sumn*deno + num*sumd;
        sumd = sumd*deno;
    } 
    //后约分
    //先求最大公约数gcd,这里用的是欧几里得法
    int m = sumd , n = sumn, r;
    r = m % n;
    while (r != 0) {
        m = n;
        n = r;
        r = m % n;
    } 
    int gcd = n;
    //分子分母同时除以gcd就可以完成约分
    sumd /= gcd;
    sumn /= gcd;
    if (sumd > 1)
        cout << sumn << / << sumd << endl;
    else
        cout << sumn << endl; 
    return 0;
} 

 

分数求和

标签:公约数   最简   整数   iostream   gcd   names   nbsp   bsp   mes   

原文地址:http://www.cnblogs.com/Zhz0306/p/7666896.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!