zoukankan      html  css  js  c++  java
  • nyoj 111-分数加减法 (gcd, switch, 模拟,数学)

    111-分数加减法


    内存限制:64MB 时间限制:1000ms 特判: No
    通过数:20 提交数:54 难度:2

    题目描述:

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

    输入描述:

    输入包含多行数据 
    每行数据是一个字符串,格式是"a/boc/d"。 
    其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。 
    
    数据以EOF结束 
    输入数据保证合法

    输出描述:

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

    样例输入:

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

    样例输出:

    1/2
    -1/4
    0

    C/C++ AC:

     1 #include <iostream>
     2 #include <algorithm>
     3 #include <cstring>
     4 #include <cstdio>
     5 #include <cmath>
     6 #include <stack>
     7 #include <set>
     8 #include <map>
     9 #include <queue>
    10 #include <climits>
    11 
    12 using namespace std;
    13 
    14 int gcd(int a, int b)
    15 {
    16     if (a < 0) a = -a;
    17     if (b < 0) b = -b;
    18     if (b == 0) return a;
    19     return gcd(b, a%b);
    20 }
    21 
    22 int main()
    23 {
    24     int a, b, c, d, e, f;
    25     char ch;
    26     while (~scanf("%d/%d%c%d/%d", &a, &b, &ch, &c, &d))
    27     {
    28         if (b == d)
    29         {
    30             f = b;
    31             switch (ch)
    32             {
    33             case '+':
    34                 e = a + c; break;
    35             default:
    36                 e = a - c;
    37             }
    38             int temp = gcd(e, f);
    39             e /= temp, f /= temp;
    40             if (e == 0)  // 特殊判断1,分子为0
    41                 printf("0
    ");
    42             else if (f == 1)  // 特殊判断2,分母为1
    43                 printf("%d
    ", e);
    44             else
    45                 printf("%d/%d
    ", e, f);
    46         }
    47         else
    48         {
    49             f = b * d;
    50             switch (ch)
    51             {
    52             case '+':
    53                 e = a * d + c * b; break;
    54             default:
    55                 e = a * d - c * b;
    56             }
    57             int temp = gcd(e, f);
    58             e /= temp, f /= temp;
    59             if (e == 0)
    60                 printf("0
    ");
    61             else if (f == 1)
    62                 printf("%d
    ", e);
    63             else
    64                 printf("%d/%d
    ", e, f);
    65         }
    66     }
    67 }
  • 相关阅读:
    LeetCode 3Sum Closest
    LeetCode Jump Game
    LeetCode Convert Sorted List to Binary Search Tree
    LeetCode Search for a Range
    LeetCode ZigZag Conversion
    sql server中主键列的插入问题
    php 联系电话验证(手机和固话)
    Update与Mysql、Sqlsever中的随机数
    Yii在nginx下多目录rewrite
    php后台判断ajax请求
  • 原文地址:https://www.cnblogs.com/GetcharZp/p/9328646.html
Copyright © 2011-2022 走看看