zoukankan      html  css  js  c++  java
  • 问题 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 );
    }
    }
    }

  • 相关阅读:
    CentOS下安装vsftpd
    Linux下快速删除大量文件
    /var/spool/postfix/maildrop/ 中有大量的文件
    Linux 查看目录大小及文件数量命令
    windows下体验Redis
    hMailServer SSL 配置
    vmware 安装 Mac OS X 10.9 Mavericks
    提问和看不懂
    C 语言学习 第三次作业总结
    C 语言学习 第二次作业总结
  • 原文地址:https://www.cnblogs.com/zsj576637357/p/2256544.html
Copyright © 2011-2022 走看看