• 问题 1011


    题目描述

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

    输入

    输入包含多行数据 每行数据是一个字符串,格式是"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

    提示

     #include<stdio.h>
    #include<math.h>
    int gys( int a, int b )
    {
        return b==0?a:gys( b,a%b );
    }
    int main()
    {
        int x1,y1, x2,y2;
        char a;
        int i, t;
        while( ~scanf( "%d/%d%c%d/%d", &x1,&y1,&a, &x2,&y2 )  )
        {
             int num1=0, num2=0, k1=0;
            if(( x1 == 0 && x2 == 0 ) || ( x1 == x2 && y1 == y2))
                printf( "0\n");
            else if( a == '+' )
               {

                    if( y1 == y2 )
                    {
                        num2 = y1;
                        num1 = x1 + x2;
                        k1 = gys( num1, num2 );
                        num2 /= k1;
                        num1 /= k1;
                    }
                    else if( y1 != y2)
                    {
                       num2 = y1*y2 ;
                          num1 = x1*y2 + x2*y1;
                       k1 = gys( num1, num2 );
                       num2 /= k1;
                       num1 /= k1;
                       }
                    printf("%d/%d\n",num1,num2);
               }
             else if( a == '-' )
             {
                 if( y1 == y2 )
                    {
                        num2 = y1;
                        num1 = x1 - x2;
                        k1 = gys( num1, num2 );
                        num2 /= k1;
                        num1 /= k1;
                    }
                   else
                    {
                       num2 =  y1* y2;
                          num1 = x1*y2-x2*y1;
                          k1 = gys( num1, num2 );
                       num2 /= k1;
                       num1 /= k1;
                       if( num1 == 0 )
                          printf( "0\n" );
                       if( num2 < 0 )
                       {
                          num1 = -num1;
                             num2 = -num2;
                          }
                       }
                    printf( "%d/%d\n",num1,num2 );
             }

        }
    }

    #include<stdio.h>
    #include<stdlib.h>
    int GCD( int a,int b )
    {
    return b==0?a:GCD( b,a%b );
    }
    int main()
    {
    int a,b,c,d;
    char f;
    while( scanf( "%d/%d%c%d/%d",&a,&b,&f,&c,&d )!=EOF )
    {
    int t1=a*d,t2=b*c,t3=b*d,t;
    if( f=='-' )
    t=t1-t2;
    else t=t1+t2;
    if( t==0 )
    printf( "0\n" );
    else
    {
    int D=GCD( abs( t ),t3 );
    printf( "%d/%d\n",t/D,t3/D );
    }
    }
    }

  • 相关阅读:
    c# 自定义位数生成激活码
    接口interface和抽象类型abstract
    winform自动升级方案
    泛型介绍
    泛型约束形式
    登录状态保持Session/Cookie
    EFCore 2.0引用标量函数
    .net生成条形码
    通用手机号、身份证号等隐藏显示方法
    .net core api Post请求
  • 原文地址:https://www.cnblogs.com/zsj576637357/p/2256544.html
Copyright © 2020-2023  润新知