zoukankan      html  css  js  c++  java
  • poj 3979 分数加减法

    分数加减法
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 13666   Accepted: 4594

    Description

    编写一个C程序,实现两个分数的加减法

    Input

    输入包含多行数据 
    每行数据是一个字符串,格式是"a/boc/d"。 

    其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。 

    数据以EOF结束 
    输入数据保证合法

    Output

    对于输入数据的每一行输出两个分数的运算结果。 
    注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数

    Sample Input

    1/8+3/8
    1/4-1/2
    1/3-1/3

    Sample Output

    1/2
    -1/4
    0

    分析:先通分再约分,即求出两个分母的最小公倍数,求分子分母的最大公约数来约分,
    最终结果可能是0,那么直接输出0;
    可能是整数
    可能是正数,也可能是负数;
     1 #include <stdio.h>
     2 #include <math.h>
     3 
     4 int gcd(int x, int y){//辗转相除法求最大公约数,x >= y;
     5     if(x < y){
     6         int tmp = x;
     7         x = y;
     8         y = tmp;
     9     }
    10     if(y == 0)
    11         return x;
    12     return gcd(y, x % y);
    13 }
    14 
    15 int main(){
    16     int a, b, c, d, _gcd, _lcm, numerator, _a, _c, _gcd1;
    17     char o;
    18     while(scanf("%d/%d%c%d/%d", &a, &b, &o, &c, &d) != EOF){
    19         _gcd = gcd(b, d);
    20         _lcm = b / _gcd * d;//两个分母的最小公倍数
    21         _a = a * d / _gcd;//通分后第一个分式的分子
    22         _c = c * b / _gcd;//通分后第二个分式的分子
    23                 //计算和式的分子值
    24         if(o == '+')
    25             numerator = _a + _c;
    26         else
    27             numerator = _a - _c;
    28                 //如果分子值为0,则直接输出
    29         if(numerator == 0)
    30             printf("%d
    ", numerator);
    31         else{
    32             _gcd1 = gcd(abs(numerator), _lcm);
    33                         //最大公约数和分母相同,说明分子和分母相同,最后的值为整数
    34             if(_gcd1 == _lcm)
    35                 printf("%d
    ", numerator / _gcd1);
    36             else
    37                 printf("%d/%d
    ", numerator / _gcd1, _lcm / _gcd1);
    38         }
    39     }
    40     return 0;
    41 }
     
  • 相关阅读:
    js变量声明提前
    03通讯录(Block传值)
    03-Block
    03通讯录(搭建编辑界面)
    03通讯录(代理解耦)
    03通讯录(逆传)
    03通讯录
    源码0604-06-掌握-大文件断点下载(断点下载)
    源码0604-05-程序不死
    源码0604-02-了解-网页开发
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/5796808.html
Copyright © 2011-2022 走看看