nyoj 111分数加减法

来源:互联网 发布:地方财政收入来源 知乎 编辑:程序博客网 时间:2024/05/23 01:25
描述
编写一个C程序,实现两个分数的加减法
输入
输入包含多行数据 
每行数据是一个字符串,格式是"a/boc/d"。 
其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。 

数据以EOF结束 
输入数据保证合法
输出
对于输入数据的每一行输出两个分数的运算结果。 
注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数
样例输入
1/8+3/81/4-1/21/3-1/3
样例输出
1/2-1/4

0

这道题就是纯粹的数学问题,掌握好对最小公倍数、最大公约数的应用就可以了,

不过对于输出要注意几点,结果为负数输出负号,以及结果为一分之几时的输出

#include<stdio.h>int fun(int n,int m){    int t,l;    if(n<m)    {        l=n;        n=m;        m=l;    }    while(m)    {        t=n%m;        n=m;        m=t;    }    return n;     //最大公约}int main(){    int x1,x2,y1,y2;    char a,b,c;    while(~scanf("%d%c%d%c%d%c%d",&x1,&b,&y1,&a,&x2,&c,&y2))    {        int n,m,t,k,y;        y=fun(y1,y2);        n=y1*y2/y;//n为分母        if(a=='+')            m=n/y1*x1+n/y2*x2;//m为分子        else            m=n/y1*x1-n/y2*x2;        if(m<0)        {            printf("-");            m=-m;        }        if(m==0)        {            printf("0\n");            continue;        }        k=fun(n,m);//分子分母最大公约数        int f=m/k;        int g=n/k;        if(g==1)            printf("%d\n",f);        else            printf("%d/%d\n",f,g);    }    return 0;}

0 0